将NSManagedObject存储在字典(NSDictionary)
我有一个自定义类,它是NSManagedObject
一个子NSManagedObject
。 我想将它存储在字典中,但是当试图这样做时,我收到一个Property list invalid for format: 200
错误。
以下是我如何创build字典:
NSDictionary *dictionary = [NSDictionary dictionaryWithObject: voiceMemo forKey:@"voiceMemo"];
尝试时结果相同
NSDictionary *dictionary = [NSDictionary dictionaryWithObject: (NSData *) voiceMemo forKey:@"voiceMemo"];
然而,当试图分别保存个别属性时,它是有效的:
NSDictionary *dictionary = [NSDictionary dictionaryWithObject: voiceMemo.attribute forKey:@"attribute"];
NSDictionary
应该能够存储数据对象,所以我猜,真正的问题是如何将NSManagedObject
对象转换为NSData
你确定错误发生在你创build字典时,就像你发布的代码所暗示的那样?
Property list invalid for format: 200
听起来像你试图写你的NSManagedObject
到文件系统。 哪个不起作用,因为NSManagedObjects
不确认NSCoding
。
您可以将NSManagedObject的属性保存在NSDictionary中,并将该字典保存到文件中。
NSArray *keys = [[[myObject entity] attributesByName] allKeys]; NSDictionary *dict = [myObject dictionaryWithValuesForKeys:keys];
当你想恢复它,你设置你的managedObject的值是这样的:
[myObject setValuesForKeysWithDictionary:dict];
在我的应用程序中,我还将MO存储在字典中(但不支持,我正在存储一个数组),但没有任何演员。 请尝试如果这也发生arrays。
您可以尝试先创build字典,然后再分配对象。
NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:managedObject forKey:@"thisOne"];
一个迅速的版本,以防万一需要它
import CoreData extension NSManagedObject { func toDict() -> [String:Any] { let keys = Array(entity.attributesByName.keys) return dictionaryWithValues(forKeys:keys) } }