2012-11-11 1 views
0

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

Спасибо.

// 
// 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"]; 

ответ

1

EDIT: Должно быть, был плохой день, когда я написал это первоначально. Убрали крайне ненужное отношение с этой должности и прояснили некоторые вещи.

Если вы не знали, 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; 
+0

Что я могу сказать, я новичок и стараюсь изо всех сил учиться. Проблема оказалась в том, что заявление «return YES» было выше всего остального. Благодарю. –

+0

Извините, если вы чувствуете, что я нахожусь на вас, я нет; Я новичок. Я думаю, что лучший способ узнать Objective-C - получить хорошую книгу; прыжки вправо и адаптация, как правило, приводят к непониманию фундаментальных понятий. Я говорю по этому опыту. – Metabble

+0

Я занимаюсь этим несколько месяцев (и я тоже пользуюсь книгами), но иногда, пытаясь понять более сложные концепции, я стараюсь замаскировать основы. Спасибо за редактирование BTW. Я вижу, где я тоже ошибался. –