簡體   English   中英

嵌套數組在Swift的realm.create(value:JSON)中引發錯誤

[英]Nested Arrays throwing error in realm.create(value: JSON) for Swift

我在Swift項目中使用Realm,並且有一個帶有兩個嵌套屬性的相當長的JSON文件。 我知道,為了讓Realm直接使用此序列化的JSON數據,屬性需要完全匹配( https://realm.io/docs/swift/latest/#json )。

但是因為領域列表需要有一個對象而不是字符串,所以我必須使用諸如List之類的東西,其中Requirement是一個擁有單個字符串(稱為“值”)的領域對象。

當我運行此代碼時:

  try! realm.write {
    let json = try! NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions())
    let exhibit = Exhibit(value: json)
    exhibit.id = "1"
    realm.add(exhibit, update: true)
  }

我收到此錯誤消息:***由於未捕獲的異常'RLMException'而終止應用程序,原因:'req1'初始化類型為'Requirements'的對象:缺少鍵'value'

這是我在其中輸入的JSON的簡化版本:

{
    "exhibit_name": "test1",
    "requirements": [
        "req1",
        "req2"
    ],
    "geofence": {
        "latitude": 36.40599779999999,
        "longitude": -105.57696279999999,
        "radius": 500
    }
}

我的Realm模型類是這樣的:

class Exhibit: Object {

  override static func primaryKey() -> String? {
    return "id"
  }

  dynamic var id = "0" //primary key
  dynamic var exhibit_name: String = ""
  let requirements = List<Requirements>()
  dynamic var geofence: Geofence?

}

class Geofence: Object {
  dynamic var latitude: Float = 0.0
  dynamic var longitude: Float = 0.0
  dynamic var radius: Float = 0.0
}

class Requirements: Object {
  dynamic var value = ""
}

我發現有趣的是,Geofence屬性沒有任何錯誤,因為那是一本字典。

如何設置需求模型以使其正常工作?

不幸的是,您不能僅僅以不同的方式來設置您的Requirements模型,這將允許您直接將JSON映射到Realm對象。

init(value: AnyObject)初始化程序需要使用字典(鍵是對象屬性的名稱)或數組(屬性值在對象模型中定義的順序相同)進行排序。 對於相關對象,遞歸調用此初始化器。

為此,您需要轉換JSON,以便將字符串值嵌套到字典或數組中。 在您的特定情況下,您可以實現如下所示的效果:

…
var jsonDict = json as! [String : AnyObject]
jsonDict["requirements"] = jsonDict["requirements"].map { ["value": $0] }
let exhibit = Exhibit(value: jsonDict)
…

邊注

我建議您為Realm模型對象類使用單數名稱(此處為Requirement而不是Requirements ),因為每個對象僅代表一個實體,即使您僅在多個關系中使用它們也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM