2017-09-25 82 views
0

我想將一個對象數組保存爲NSUserDefault,但沒有成功。在嘗試之前註銷數組時,它充滿了對象。但是,當我嘗試註銷NSUserDefault時,它是NULL。任何人都可以看到我可能做錯了什麼?感謝您的任何建議:IOS/Objective-C:將自定義陣列保存爲NSUserDefault

Items *myItems = [mutableFetchedObjects mutableCopy]; 
    NSLog(@"my Items%@",myItems);//LOGS OUT LONG LIST OF ITEMS 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myItems]; 
    [currentDefaults setObject:data forKey:@"myItems"]; 
[currentDefaults synchronize]; 
    Items *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"myItems"] mutableCopy]; 
    NSLog(@"my Retrieved Items%@",myRetrievedItems); //LOGS OUT AS NULL 
+1

你爲什麼使用'arrayForKey'?您需要檢索數據並將其解壓縮 – Paulw11

+0

我不確定,但是即使它正在顯示NULL,您仍在記錄相同的對象? –

回答

1

正如提到的其他答案,這是因爲你的數組不符合NSDictionary類型(字符串,二進制,布爾等)。您的數組成員是自定義類型,因此無法保存。你需要做的是將你的數組轉換爲二進制,然後保存。

1

您必須在取回數據時首先取消存檔您的數據。您直接訪問數據。這不起作用。你可以做類似的方式要存檔的數據

NSData *dataObj = [currentDefaults objectForKey:@"myItems"]; 

Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj]; 

更多的參考,可以考慮一下這款answer.

希望這有助於。 謝謝!

+0

Got [Items initWithCoder:]:無法識別的選擇器發送到實例 – user6631314

+1

@ user6631314,正如iGenio提到的,這可能是因爲您的類不符合NSCoding協議。你可以這樣做:https://stackoverflow.com/a/6696735/3824808 –

0

您的訪問值方法是錯誤的。

你可以在下面的代碼數組:

項目* myRetrievedItems = [[[NSUserDefaults的standardUserDefaults] objectForKey:@ 「myItems」] mutableCopy]。

相關問題