将NSManagedObject存储在字典中(NSDictionary)

ant*_*kes 18 iphone cocoa-touch nsdictionary nsmanagedobject ios

我有一个自定义类,它是一个子类NSManagedObject.我想将它存储在字典中,但是当我尝试这样做时,我收到一个Property list invalid for format: 200错误.

以下是我尝试创建字典的方法:

NSDictionary *dictionary = 
    [NSDictionary dictionaryWithObject: voiceMemo forKey:@"voiceMemo"];
Run Code Online (Sandbox Code Playgroud)

尝试时结果相同

NSDictionary *dictionary = 
    [NSDictionary dictionaryWithObject: (NSData *) voiceMemo forKey:@"voiceMemo"];
Run Code Online (Sandbox Code Playgroud)

但是,在尝试单独保存各个属性时,它可以正常工作:

NSDictionary *dictionary = 
    [NSDictionary dictionaryWithObject: voiceMemo.attribute forKey:@"attribute"];
Run Code Online (Sandbox Code Playgroud)

NSDictionary应该能够存储数据对象,所以我猜,真正的问题是如何将NSManagedObject对象转换为NSData

Mat*_*uch 51

您确定在创建字典时发生了错误,就像您发布的代码所暗示的那样吗?

Property list invalid for format: 200听起来你试图写你NSManagedObject的文件系统.哪个不行,因为NSManagedObjects不确认NSCoding.

您可以在NSDictionary中保存NSManagedObject的属性,并将此字典保存到文件中.

NSArray *keys = [[[myObject entity] attributesByName] allKeys];
NSDictionary *dict = [myObject dictionaryWithValuesForKeys:keys];
Run Code Online (Sandbox Code Playgroud)

当你想要恢复它时,你可以像这样设置managedObject的值:

[myObject setValuesForKeysWithDictionary:dict];
Run Code Online (Sandbox Code Playgroud)