使用 Hyperolso Sync 将多级 JSON 对象映射到 NSManagedObject
Posted
技术标签:
【中文标题】使用 Hyperolso Sync 将多级 JSON 对象映射到 NSManagedObject【英文标题】:Map a multi-level JSON object to NSManagedObject with Hyperolso Sync 【发布时间】:2015-10-30 16:42:13 【问题描述】:我正在使用来自 HyperOslo 的出色 Sync 从 API 获取 JSON 对象:
JSON 对象:
"user":
"name" : "damien",
"email" : "myemail@gmail.com",
"settings" :
"notification" : "true",
"secretKey" : "dzadd7z5a7dzd5azd"
这是我的用户对象,继承 NSManagedObject。将属性“设置”作为自定义 NSObject:
class User: NSManagedObject
@NSManaged var name: String?
@NSManaged var email: String?
@NSManaged var settings: Settings?
这看起来不可能! (如果知道其他第三方框架?)
作为the doc,解决方案是使用二进制数据类型:
...但是如何在我的模型中构建此属性的吸气剂? (我知道下面的吸气剂有任何意义):
@NSManaged var settings: Settings?
return [NSKeyedUnarchiver unarchiveObjectWithData:self.settings];
【问题讨论】:
【参考方案1】:框架的构建者建议我a good alternative solution:
为什么不为新对象创建一个新的 Core Data 表?
1 - 在核心数据中添加实体
2 - 为实体创建 NSManagedObject 子类
class Setting: NSManagedObject
@NSManaged var notification: Bool?
@NSManaged var notification: String?
3 - 在用户信息中设置hyper.remoteKey = secretKey
。
如果您的 JSON 显示“secret_key”,同步会将其映射到核心中的
secretKey
数据。但是如果你的 JSON 说“secretKey”它不知道如何 将其转换为secretKey
,因为它只会自动执行snake_case
的转换。所以如果你想使用secretKey
从您的 JSON 中,您需要告诉 Sync 这个。你通过添加来做到这一点hyper.remoteKey
(键)和secretKey
作为用户信息中的值。
3 - 在 User 上创建“设置”关系(不要忘记在模型中添加属性)
【讨论】:
以上是关于使用 Hyperolso Sync 将多级 JSON 对象映射到 NSManagedObject的主要内容,如果未能解决你的问题,请参考以下文章