使用 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的主要内容,如果未能解决你的问题,请参考以下文章

JSON with C program

Flutter 使用合理的 null 安全性将多级 JSON 解析为类

如何使用 linq 将平面列表转换为多级查找?

使用 RestKit 处理多级动态嵌套属性

将多级索引的第一级旋转为多级列的第一级

vue+element UI实现多级导航菜单