gpt4 book ai didi

iOS NSDictionary 保存到 NSUserDefaults 不保存值

转载 作者:可可西里 更新时间:2023-11-01 06:19:11 24 4
gpt4 key购买 nike

我正在尝试将具有数组值的 NSDictionary 保存到 NSUserDefaults 但我遇到了一些奇怪的问题。

我的 NSDictionaryNSStrings 用于 keys 并且每个 value 都是一个 NSArray NSNumbers。当我打印字典时,一切都很好。我将这本字典写入 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 包含所有 但所有 现在都是空的!重新创建类后,所有新添加的都存在,但没有保留。

这里可能有什么问题?控制台中没有警告或错误。

最佳答案

试试这个:

您可以使用 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];

iOS Developer Documentation for NSKeyedArchiver它说:

NSKeyedArchiver, a concrete subclass of NSCoder, provides a way to encode objects (and scalar values) into an architecture-independent format that can be stored in a file. When you archive a set of objects, the class information and instance variables for each object are written to the archive. NSKeyedArchiver’s companion class, NSKeyedUnarchiver, decodes the data in an archive and creates a set of objects equivalent to the original set.

关于iOS NSDictionary 保存到 NSUserDefaults 不保存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22501998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com