[英]iOS NSDictionary saved to NSUserDefaults not saving values
我試圖將NSDictionary
與數組值保存到NSUserDefaults
但我遇到了一些奇怪的麻煩。
我的NSDictionary
有keys
NSStrings
,每個value
都是NSNumbers
的NSArray
。 當我打印字典時,一切都很好。 我把這本字典NSUserDefaults
,如果我馬上把它讀出來,一切都很好。 使用這一切接縫就好了:
[[NSUserDefaults standardUserDefaults] setObject:self.selectedOptionPositions
forKey:PREF_OPTIONS_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
//THIS PRINT EVERYTHING OUT EXACTLY AS IT SHOULD!
NSLog(@"read after write: %@", [[NSUserDefaults standardUserDefaults]
objectForKey:PREF_OPTIONS_KEY]);
當我創建一個處理它的類的新實例時,問題就來了。 當我創建類的新實例並在init方法中檢查NSDictionary
如下:
NSLog(@"read initial: %@", [[NSUserDefaults standardUserDefaults]
objectForKey:PREF_OPTIONS_KEY]);
當我打印該日志記錄時, NSDictionary
包含所有鍵,但所有values
現在都是空的! 重新創建類后,所有新添加的keys
存在,但沒有values
保持不變。
這可能有什么問題? 控制台中沒有警告或錯誤。
嘗試這個:
您可以使用NSKeyedArchiver將字典寫入NSData,您可以將其存儲在首選項中。
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.selectedOptionPositions];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:PREF_OPTIONS_KEY];
用於檢索數據:
NSData *dictionaryData = [defaults objectForKey:PREF_OPTIONS_KEY];
NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:dictionaryData];
與在NSKeyedArchiver的iOS開發人員文檔中一樣,它說:
NSKey的具體子類NSKeyedArchiver提供了一種將對象(和標量值)編碼為可以存儲在文件中的獨立於體系結構的格式的方法。 歸檔一組對象時,每個對象的類信息和實例變量都將寫入歸檔。 NSKeyedArchiver的伴侶類NSKeyedUnarchiver對存檔中的數據進行解碼,並創建一組與原始集相當的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.