我想在 NSUserDefaults
中保存一个 NSMutableDictionary
对象。 NSMutableDictionary
中的键类型是 NSString
,值类型是 NSArray
,其中包含实现 NSCoding
的对象列表>。每个文档,NSString
和 NSArray
都符合 NSCoding
。
我收到此错误:
[NSUserDefaults setObject: forKey:]: Attempt to insert non-property value.... of class NSCFDictionary.
最佳答案
我发现了一种替代方法,在保存之前,我使用 NSKeyedArchiver
对根对象(NSArray
对象)进行编码,它以 NSData
结尾。然后使用 UserDefaults 保存 NSData
。
当我需要数据时,我读出NSData
,并使用NSKeyedUnarchiver
将NSData
转换回对象。
这有点麻烦,因为我每次都需要与 NSData
进行转换,但它确实有效。
以下是每个请求的一个示例:
保存:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arr = ... ; // set value
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[defaults setObject:data forKey:@"theKey"];
[defaults synchronize];
加载:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"theKey"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
数组中的元素实现
@interface CommentItem : NSObject<NSCoding> {
NSString *value;
}
然后在CommentItem
的实现中,提供了两个方法:
-(void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:value forKey:@"Value"];
}
-(id)initWithCoder:(NSCoder *)decoder
{
self.value = [decoder decodeObjectForKey:@"Value"];
return self;
}
谁有更好的解决方案?
谢谢大家。
关于ios - 为什么 NSUserDefaults 无法在 iOS 中保存 NSMutableDictionary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471830/