2011-02-23 75 views
0

我試圖在iPhone應用程序中從NSUserDefaults加載數組。我做一些事情,與此代碼:從NSUserDefaults加載數組時,爲什麼我的應用程序崩潰?

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
self.myarray_1 = nil; 

但隨後在下面的行我的應用程序崩潰:

self.myarray_1 = [[NSMutableArray alloc] 
        initWithArray: [defaults objectForKey:@"highscores"]]; 

與錯誤

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: '-[NSCFString count]: unrecognized selector sent to instance 0x796c710' 

我該如何解決這個問題?

+0

除了Bjorn指出的之外,你在分配self.myarray_1時泄漏了一個NSArray。不要在那裏分配數組,而是使用'-arrayWithArray:'來獲得一個自動釋放的實例。 'myarray_1'也不遵循標準的Cocoa命名約定。我可以建議使用「highScoresArray」還是「highScores」? – 2011-02-25 22:17:21

回答

2

錯誤消息說NSString的一個實例收到一條count消息,但顯然它沒有對它做出響應(即沒有實現這樣的消息)。該消息很可能是針對NSArray實例的。

您是否在密鑰的默認值中無意中保存了NSString而不是NSArray?也許在你之前的一個版本中?要清除所有用戶的默認設置,您可以從模擬器或設備上刪除應用程序並重新安裝。

0

試試這個

self.myarray_1 = [[NSMutableArray alloc] initWithArray:(NSArray*)[defaults objectForKey:@"highscores"]]; 

,我相信你已經變myarray_1爲您的這個類的proparty。

0

應用默認值是一個字符串,而不是一個數組。您可能將默認設置爲字符串而不是代碼中其他位置的數組。作爲第二個參數,請查找您要撥打-[NSUserDefaults setObject:forKey:]的位置,並使用highscores鍵。要麼你仍然在傳遞一個NSString作爲第一個參數,或者你只是在一個點上,它仍然在應用程序的首選項中設置。

相關問題