[英]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.