所以我有下面的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 theList`。
所以你的密码

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属性。

07-24 09:25
查看更多