将 NSManagedObject 存储在字典中(NSDictionary)
Posted
技术标签:
【中文标题】将 NSManagedObject 存储在字典中(NSDictionary)【英文标题】:Storing NSManagedObject in a dictionary (NSDictionary) 【发布时间】:2011-04-14 14:02:06 【问题描述】:我有一个自定义类,它是NSManagedObject
的子类。我想将其存储在字典中,但在尝试这样做时收到Property list invalid for format: 200
错误。
这是我尝试创建字典的方法:
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
【问题讨论】:
【参考方案1】:您确定在创建字典时会发生错误,就像您发布的代码所暗示的那样?
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];
【讨论】:
你是对的,错误发生在下一行,当我试图写入数据时(在本例中是 UILocalNotification 的 userData)。正如我在问题中所写,单独保存属性确实有效,因此可以解决问题。我只是认为(或希望)有办法解决这个问题。谢谢! 我在 Google 上搜索了获取键数组,NSArray *keys = [[[myObject entity] attributesByName] allKeys];比其他答案最好谢谢! @Matthias 我应该如何在同一个字典中获取关系对象?【参考方案2】:在我的应用程序中,我还将 MO 存储在字典中(但不要坚持,我存储在数组中)但没有任何演员表。如果数组也发生这种情况,请尝试。
您可以尝试先创建字典,然后再分配对象。
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:managedObject forKey:@"thisOne"];
【讨论】:
【参考方案3】:一个快速版本,以防万一有人需要它
import CoreData
extension NSManagedObject
func toDict() -> [String:Any]
let keys = Array(entity.attributesByName.keys)
return dictionaryWithValues(forKeys:keys)
【讨论】:
以上是关于将 NSManagedObject 存储在字典中(NSDictionary)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NSManagedObject 将 NSDictionary 保存到 CoreData?
使用 NSDictionary 内容创建 NSManagedObject
如何将其他 NSManagedObjects 存储为 NSManagedObject 的属性
NSManagedObject 和 Codable 用于存储在服务器和本地存储中的类