从基于 Siesta 实体的 JSON 初始化领域对象失败

Posted

技术标签:

【中文标题】从基于 Siesta 实体的 JSON 初始化领域对象失败【英文标题】:Initialisation of Realm objects from JSON built upon Siesta Entity fails 【发布时间】:2017-01-22 19:11:35 【问题描述】:

我正在使用Siesta 从我的服务器获取资源。我正在按照用户指南配置转换器以自动将 JSON 字符串转换为 Realm 对象。

它适用于单个对象,但不知何故,对于此类对象的数组会失败。

这是我的精简模型:

public class ObservingSite: Object 
  dynamic var uuid: String = ""
  dynamic var name: String = ""

还有午睡转换器,如示例所示,在我的Service 子类中:

    self.configureTransformer("/\(self.APIVersion)/observingsites/") 
      JSON($0.content as AnyObject).arrayValue.map  ObservingSite(value: $0) 
    

JSON 是由SwiftyJSON 定义的数据类型。

我得到的疯狂错误信息:

2017-01-22 20:04:00.848504 Arcsecond Demo macOS[25453:8681143] [General] An uncaught exception was raised

2017-01-22 20:04:00.848592 Arcsecond Demo macOS[25453:8681143]     [General] Invalid value '
  "name" : "Adelaide Observatory",
  "uuid" : "99b98d50-d831-48c2-89b3-2ff6e4c9f4aa"
' to initialize object of type 'ObservingSite': missing key 'uuid'
2017-01-22 20:04:00.849000 Arcsecond Demo macOS[25453:8681143] [General] (
    0   CoreFoundation                      0x00007fff7fa49e7b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x00007fff94634cad objc_exception_throw + 48
    2   Realm                               0x000000010040c3f3 RLMValidatedValueForProperty + 282
    3   Realm                               0x000000010040b863 -[RLMObjectBase initWithValue:schema:] + 1105
    4   RealmSwift                          0x00000001002aa5da _TFC10RealmSwift6ObjectcfT5valueP__S0_ + 202
    5   Arcsecond                           0x000000010024fbfb _TFC9Arcsecond13ObservingSitecfT5valueP__S0_ + 203
    6   Arcsecond                           0x000000010024fc84 _TFC9Arcsecond13ObservingSiteCfT5valueP__S0_ + 52
    7   Arcsecond                           0x0000000100253a1c 

但是该死的uuid 键在这里!?我错过了什么?非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

我设法让它工作,但没有完全理解为什么。但是transformer实际上是错误的,那不是Realm的问题。现在,Siesta 转换器看起来像这样:

    self.configureTransformer("/\(self.APIVersion)/observingsites/") 
        ($0.content as [AnyObject]).map  ObservingSite(value: $0) 
    

我基本上删除了JSON init。

【讨论】:

以上是关于从基于 Siesta 实体的 JSON 初始化领域对象失败的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 初始化链接 CoreData 实体

快速从领域中删除对象

特定领域知识图谱知识融合方案(实体对齐):基于图神经网络的商品异构实体表征探索

在 Siesta 中覆盖本地数据?

Siesta 作为 SwiftPM 在 Linux 上的依赖项

Swift Siesta - 如何将异步代码包含到请求链中?