2012-11-11 120 views
0

我想知道爲什麼它看起來沒有「應用程序didFinishLaunchingWithOptions」被稱爲當我的應用程序啓動時。我的NSLog(@「Launch!」)語句沒有在控制檯中顯示出來,而且它之後的字典也沒有被創建。如果它有所作爲,我將使用導航控制器的Storyboard作爲初始視圖。我嘗試在導航控制器中添加一個「對象」,並將其設置爲「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

編輯:當我最初寫這篇文章的時候,一定會遇到一個糟糕的一天。從這篇文章中刪除了極其不必要的態度,並澄清了一些事情。

如果您不知道,return將控制返回給方法/子例程的調用方。由於您在創建字典之前從方法返回YES,因此它永遠不會被創建並設置爲該屬性。

此外,無論您試圖將其分配給NSMutableDictionary的語法都不正確。看來personDict是基於@synthesize的財產,因此:

您正在訪問支持它的實例變量。您使用點符號這樣應該訪問屬性:

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

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

或使用getter和setter方法(點符號具有相同效果):

[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

我能說什麼,我是新的,並盡我所能去學習。事實證明,這是由於「返回YES」聲明高於一切。謝謝。 –

+0

對不起,如果你覺得我在嘲笑你,我不會;我是新來的。我認爲學習Objective-C的最佳方式是獲得一本好書;正確的跳躍和適應往往會導致對基本概念的誤解。我從這方面的經驗談起。 – Metabble

+0

我已經在這裏待了幾個月(我也一直在使用書籍),但有時在試圖弄清更復雜的概念時,我傾向於忽視基本知識。感謝編輯BTW。我明白我的錯在哪裏。 –

相關問題