将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) } }