【问题标题】:Storing NSManagedObject in a dictionary (NSDictionary)将 NSManagedObject 存储在字典中(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

【问题讨论】:

    标签: iphone cocoa-touch ios nsdictionary nsmanagedobject


    【解决方案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)
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多