Realm和Objectmapper:一个项目的数组在我的Realm数据库中为每个请求保持堆叠

时间:2016-05-10 13:07:31

标签: json swift realm objectmapper realm-list

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

这是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 getType: Object, Mappable {
    dynamic var text: String?

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

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

我遇到的问题是,每次我调用后端时,数据库都不会更新类型中的数据(或删除它们,并抓取新的数据),它只是不断堆积它!这使得我的getType数据库在一些调用之后成为280多行,而它只出现在10个对象中。

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

1 个答案:

答案 0 :(得分:1)

我认为您可能使用主键更新了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)
}