Realm 和 Objectmapper:对于每个请求,一个项目的数组不断堆叠在我的 Realm 数据库中

Realm and Objectmapper: Array of one item keeps stacking in my Realm database for every request

这是我的 之一的跟进。在 ObjectMapper 的帮助下,我需要在我的 Realm 数据库中映射一个数组 types,它只包含 1 个单词(有时是两个单词)。

这是JSON:

{
  "result": [
    {
      "id": 20,
      "types": [
        "now"
      ],
      "url": "/nl/whereto/ezrhgerigerg"
    },

我得到了以下解决方法,部分有效:

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)
}

而我的 getType() 的 Class 是一个对象:

class getType: Object, Mappable {
    dynamic var text: String?

    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        text <- map[""]
    }
}

我遇到的问题是,每次我调用后端时,数据库都不会按类型更新数据(或删除它们,并获取新数据),它只是不断堆积起来!这使我的 getType 数据库在一些调用后有 280 多行,而它只存在于 10 个对象中。

x 次后端调用后,这将导致严重的问题。有谁知道我应该怎么做?

我认为您可能使用主键更新了 Publication 对象。不幸的是,getType 对象没有主键。不能用主键自动更新。

因此如果发布对象已经存在,您可以手动删除typez 属性。像下面这样:

let publication = Mapper<Publication>().map(json)
// ...
try! realm.write {
    // Check whether the Publication object already exists
    let key = ... // Primary key value (e.g. 20)
    if let publication = realm.objectForPrimaryKey(Publication.self, key: key) {
        // If it already exists, delete `typez` objects
        realm.delete(publication.typez)
    }

    realm.add(publication, update: true)
}