使用Hyperolso Sync将多级JSON对象映射到NSManagedObject

时间:2015-10-30 16:42:14

标签: json swift nsmanagedobject nskeyedarchiver

我使用来自HyperOslo的优秀Sync从API获取JSON对象:

JSON对象:

{"user":
  {"name" : "damien",
   "email" : "myemail@gmail.com",
   "settings" : 
    { "notification" : "true",
      "secretKey" : "dzadd7z5a7dzd5azd"
    }
  }
}

这是我的User对象,子类化NSManagedObject。与财产"设置"作为自定义NSObject:

class User: NSManagedObject {
    @NSManaged var name: String?
    @NSManaged var email: String?
    @NSManaged var settings: Settings?
}

这看起来不可能! (如果有什么东西知道其他第三方框架?)

作为the doc,解决方案是使用二进制数据类型:

enter image description here

...但是如何在我的模型中构建此属性的getter? (我知道下面的吸气器有任何意义):

 @NSManaged var settings: Settings?{
  return [NSKeyedUnarchiver unarchiveObjectWithData:self.settings];
}

1 个答案:

答案 0 :(得分:2)

框架的构建者告诉我a good alternative solution

  

为什么不为新对象创建一个新的Core Data表?

1 - 在核心数据中添加实体

enter image description here

2 - 为实体

创建NSManagedObject子类
class Setting: NSManagedObject {
    @NSManaged var notification: Bool?
    @NSManaged var notification: String?
}

3 - 在用户信息中设置hyper.remoteKey = secretKey

  

如果你的JSON说" secret_key"同步会将其映射到Core中的secretKey   数据。但如果你的JSON说" secretKey"它不知道如何做   将其转换为secretKey因为它只是自动执行   snake_case的转换。所以如果你想使用secretKey   从你的JSON你需要告诉同步这个。你可以通过添加来实现   hyper.remoteKey(密钥)和secretKey作为用户信息中的值。

enter image description here

3 - 创建"设置"用户关系(不要忘记在模型中添加属性)

enter image description here