繁体   English   中英

将NSManagedObject存储在字典中(NSDictionary)

[英]Storing NSManagedObject in a dictionary (NSDictionary)

我有一个自定义类,它是NSManagedObject的子NSManagedObject 我想将它存储在字典中,但是当我尝试这样做时,我收到一个Property list invalid for format: 200Property 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

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

Property list invalid for format: 200听起来像您尝试将NSManagedObject写入文件系统。 哪个不起作用,因为NSManagedObjects不确认NSCoding

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

NSArray *keys = [[[myObject entity] attributesByName] allKeys];
NSDictionary *dict = [myObject dictionaryWithValuesForKeys:keys];

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

[myObject setValuesForKeysWithDictionary:dict];

一个快速版本,以防任何人需要它

import CoreData 
extension NSManagedObject {
    func toDict() -> [String:Any] {
        let keys = Array(entity.attributesByName.keys)
        return dictionaryWithValues(forKeys:keys)
    }
}

在我的应用程序中,我也将MO存储在字典中(但没有保留,我存储在数组中)但没有任何演员。 请尝试,如果这也发生在阵列上。

您可以先尝试创建字典,然后再分配对象。

NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:managedObject forKey:@"thisOne"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM