2014-08-28 54 views
1

這裏對象是我的代碼:NSUserDefaults的 - 插入陣列不工作

NSMutableDictionary *newThoughtDict = [[NSMutableDictionary alloc] init]; 
[newThoughtDict setObject:self.triggerOne.text forKey:@"thought"]; 
[newThoughtDict setObject:self.date forKey:@"date"]; 

NSDate *currentDate = [[NSDate alloc] initWithTimeIntervalSince1970:NSTimeIntervalSince1970]; 
[newThoughtDict setObject:currentDate forKey:@"date"]; 

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *arrayData = [currentDefaults objectForKey:@"thoughtArray"]; 
if (arrayData != nil) 
{ 
    NSMutableArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData]; 
    [savedArray insertObject:newThoughtDict atIndex:0]; //<---error being thrown here 
    [currentDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:savedArray] forKey:@"thoughtArray"]; 
    [currentDefaults synchronize]; 

被拋出的錯誤是: - [__ NSArrayI insertObject:atIndex:]:無法識別的選擇發送到實例0x170200150

似乎像問題是當我插入一個字典到數組,但代碼做這是正確的,所以我想知道如何從NSUserDefaults檢索數組是否有問題..

此外,當我測試應用程序,它應該返回「零」,因爲我還沒有真正c reate NSUserDefault對象和密鑰..

謝謝。

回答

3

即使您設置了可變對象,NSUserDefaults也會始終返回不可變對象。如果要更改從默認值返回的內容,您必須創建可變副本。

+0

即使在編輯if語句之後,它仍然不起作用:NSArray * unmutableArray = [NSKeyedUnarchiver unarchiveObjectWithData:arrayData]; NSMutableArray * savedArray = [unmutableArray copy]; [savedArray insertObject:newThoughtDict atIndex:0]; 錯誤是在同一個地方 – Broderick 2014-08-29 00:06:11

+2

副本*也*不會做一個可變的副本。你必須調用mutableCopy – 2014-08-29 00:10:06