приложение didFinishLaunchingWithOptions не вызывается

Я пытаюсь понять, почему при запуске моего приложения не вызывается «application didFinishLaunchingWithOptions». Мой оператор NSLog (@ "Launch!") Не отображается в консоли, как и словарь после того, как он не создается. Если это имеет значение, я использую раскадровку с контроллером навигации в качестве начального представления. Я попытался добавить «объект» к контроллеру навигации и установить для него значение «AppDelegate», а затем установить его как выход для ссылок, но это тоже не имело значения. Разве этот метод не должен вызываться каждый раз при запуске приложения? Я даже симулятор сбросил, но все равно ничего.

Спасибо.

//
//  AppDelegate.m
//  PersonLibraryiOS
//
//  Created by Joey on 11/7/12.
//  Copyright (c) 2012 Joey. All rights reserved.
//

#import "AppDelegate.h"
#import "AddViewController.h"
#import "Person.h"
@implementation AppDelegate
@synthesize PersonDict;

-(void)addtoDict:(Person *)newPerson
{
    [PersonDict setObject:@"newPerson" forKey:[newPerson name]];
}



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  NSLog (@"Launch!");

    // Override point for customization after application launch.
    return YES;
    PersonDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"diskDict"];

person Joseph Toronto    schedule 11.11.2012    source источник


Ответы (1)


РЕДАКТИРОВАТЬ: Должно быть, у меня был плохой день, когда я писал это изначально. Убрал крайне ненужное отношение из этого сообщения и прояснил некоторые вещи.

Если вы не знали, return возвращает управление вызывающей стороне метода / подпрограммы. Поскольку вы возвращаете YES из метода до создания словаря, он никогда не создается и не устанавливается в свойство.

Кроме того, синтаксис того, что вы пытаетесь назначить этому NSMutableDictionary, неверен. Кажется, что personDict - это свойство, основанное на @synthesize, поэтому:

Вы получаете доступ к поддерживающей его переменной экземпляра. Вы должны получить доступ к свойствам, используя точечную нотацию, например:

self.personDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"diskDict"];

//in addToDict
[self.personDict setObject:@"newPerson" forKey:[newPerson name]];

или используя сеттеры и геттеры (точечная нотация имеет идентичный эффект):

[self personDict];
[self setPersonDict];

Я не думаю, что ваше использование setObject:forKey: - это то, что вы намеревались.

//the object associated with the key will always be
//the NSString "newPerson" 
[self.personDict setObject:@"newPerson" forKey:[newPerson name]];
//did you mean to set the object to the method argument newPerson?
[self.personDict setObject: newPerson forKey:[newPerson name]];

Кроме того, в Objective-C вы должны называть свойства и переменные в верблюжьем регистре, причем первая буква должна быть строчной. Как myCoolVar, или в данном случае personDict, а не PersonDict; первая буква заглавная буква верблюжьего регистра используется для имен классов, например, ваш Person класс.

Наконец, если вы вручную @synthesize, рекомендуется назвать резервную переменную _<variable name>, чтобы избежать случайного доступа к ней.

@synthesize personDict = _personDict;
person Metabble    schedule 11.11.2012
comment
Что я могу сказать, я новичок и стараюсь изо всех сил учиться. Проблема оказалась из-за того, что оператор return YES был выше всего остального. Спасибо. - person Joseph Toronto; 12.11.2012
comment
Извини, если ты чувствуешь, что я тебе говорю, но это не так; Я сам новенький. Я считаю, что лучший способ изучить Objective-C - это получить хорошую книгу; прыгать прямо и адаптироваться, как правило, приводит к неправильному пониманию фундаментальных концепций. Я говорю об этом на собственном опыте. - person Metabble; 12.11.2012
comment
Я занимаюсь этим несколько месяцев (и я тоже пользуюсь книгами), но иногда, пытаясь понять более сложные концепции, я стараюсь замалчивать основы. Кстати, спасибо за правки. Я тоже понимаю, где я ошибся. - person Joseph Toronto; 12.11.2012
comment
Я тоже этим занимаюсь несколько месяцев. Сначала у меня были проблемы, но потом я взял копию Программирование iOS 5. Он дал мне указание прочитать первую половину или около того языка программирования C от K&R. Некоторые говорят, что вам следует начать с Objective-C, но я обнаружил, что изучение основ подпрограмм, типов данных, потока управления, указателей и т. Д., Сначала изучив C, мне очень помогло. Прошло совсем немного времени, прежде чем я смог выполнять упражнения. Затем я мог бы сосредоточиться на изучении специфики объектно-ориентированного программирования. PiOS5, как правило, требует много времени, но пока у меня это работает. :) - person Metabble; 12.11.2012