我想保存一个NSMutableDictionary
对象NSUserDefaults
。键类型NSMutableDictionary
是NSString
,值类型是NSArray
,它包含实现的对象列表NSCoding
。每份文件,NSString
和NSArray
两者都符合NSCoding
。
我收到此错误:
[NSUserDefaults setObject:forKey:]:尝试插入类NSCFDictionary的非属性值....
发布于 2019-04-12 08:36:46
如果要在用户默认值中保存对象,则所有对象(递归地,一直向下)必须是属性列表对象。符合NSCoding并不意味着什么 - NSUserDefaults
不会自动编码NSData
,你必须自己做。如果您的“实现的对象列表NSCoding
”表示不是属性列表对象的对象,那么在保存到用户默认值之前,您必须对它们执行某些操作。
FYI财产清单类NSDictionary
,NSArray
,NSString
,NSDate
,NSData
,和NSNumber
。您可以将可变子类(如NSMutableDictionary
)写入用户首选项,但您读出的对象将始终是不可变的。
发布于 2019-04-12 09:45:46
最简单的答案:
NSDictionary
如果键是NSStrings,则只是一个plist对象。因此,存储的“钥匙”为用。NSStringstringWithFormat
方案:
NSString *key = [NSString stringWithFormat:@"%@",[dictionary valueForKey:@"Key"]];
好处:
NULL
。https://stackoverflow.com/questions/-100001102
复制相似问题