将NSManagedObject存储在字典中NSDictionary

问题描述

| 我有一个自定义类,它是
NSManagedobject
的子类。我想将其存储在字典中,但尝试这样做时会收到receive1ѭ错误。 这是我尝试创建字典的方法
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
听起来像是您尝试将ѭ0write写入文件系统。哪一个不起作用,因为
NSManagedObjects
不确定to11ѭ。 您可以将NSManagedObject的属性保存在NSDictionary中,然后将此字典保存到文件中。
NSArray *keys = [[[myObject entity] attributesByName] allKeys];
NSDictionary *dict = [myObject dictionaryWithValuesForKeys:keys];
而当您想还原它时,可以像下面这样设置managedObject的值:
[myObject setValuesForKeysWithDictionary:dict];
    ,在我的应用程序中,我还将MO \存储在字典中(但没有保留,我存储在数组中)但没有任何强制转换。如果数组也发生这种情况,请尝试。 您可以尝试先创建字典,然后再分配对象。
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)
    }
}