簡體   English   中英

iOS NSDictionary保存到NSUserDefaults而不保存值

[英]iOS NSDictionary saved to NSUserDefaults not saving values

我試圖將NSDictionary與數組值保存到NSUserDefaults但我遇到了一些奇怪的麻煩。

我的NSDictionarykeys NSStrings ,每個value都是NSNumbersNSArray 當我打印字典時,一切都很好。 我把這本字典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];

與在NSKeyedArchiveriOS開發人員文檔中一樣,它說:

NSKey的具體子類NSKeyedArchiver提供了一種將對象(和標量值)編碼為可以存儲在文件中的獨立於體系結構的格式的方法。 歸檔一組對象時,每個對象的類信息和實例變量都將寫入歸檔。 NSKeyedArchiver的伴侶類NSKeyedUnarchiver對存檔中的數據進行解碼,並創建一組與原始集相當的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM