所以我有下面的JSON,我将它与ObjectMapper和Realm一起使用。
{
"result": [
{
"id": 20,
"types": [
"now"
],
"url": "/nl/whereto/ezrhgerigerg",
"categories": [
{
"id": 39,
"name": "Food "
},
{
"id": 21,
"name": "Varia"
}
]
},
我的问题是从“types”中获取数据,对于数组中的某些项,它表示“now”或“later”,而对于其他项,它是空的(因此,没有给出类型项)。
我尝试在我的映射中执行以下操作:
class Publication: Object, Mappable {
dynamic var id:Int = 0
var typez = List<getType>()
dynamic var url:String?
required convenience init?(_ map: Map) {
self.init()
}
override static func primaryKey() -> String? {
return "id"
}
func mapping(map: Map) {
id <- map["id"]
typez <- map["types"]
url <- map["url"]
}
}
class getType: Object, Mappable {
dynamic var text: String = ""
required convenience init?(_ map: Map) {
self.init()
}
func mapping(map: Map) {
text <- map[""]
}
}
当我检查Realm数据库时,您可以看到typez,一个[getType]数组已经生成,但是对于所有项(甚至是类型为“now”的项)它都是空的。其他两项(id和url)将填写在数据库中。
我做错了什么,它不会保存到数据库?
最佳答案
因为领域无法检测分配List
属性,因为List
属性不是Objective-C类型。因此List
属性应该声明为let
,而不应该声明为nil
。您应该使用append
/remove…/
insert…method to modifying the
List`。
所以你的密码
typez <- map["types"]
不起作用,因为您直接将值赋给
typez
属性。解决方法如下:
func mapping(map: Map) {
...
var typez: [String]? = nil
typez <- map["types"]
typez?.forEach { t in
let obj = getType()
obj.text = t
self.typez.append(obj)
}
...
首先,将映射值存储到局部变量(它是字符串数组)。然后将字符串数组转换为对象。然后将对象附加到
List
属性。