领域:更新对象而不更新列表

时间:2017-01-18 14:17:04

标签: ios swift realm objectmapper

有没有办法更新对象而不用ObjectMapper删除它的列表?

例如:

我有User型号:

class User: Object, ObjectMapper {
  dynamic var id: Int = 0
  dynamic var name: String = ""

  var locations = List<Location>()

  convenience required init?(map: Map) {
  }

  func mapping(map: Map) {
    id        <- map["id"]
    name      <- map["name"]
    locations <- (map["locations"], ListTransform<Location>())
  }
}

现在,如果我从服务器获取用户数据,出于效率原因,我不会每次都获取这些位置。但是,如果我在没有它们的情况下初始化用户并使用add(user, update: true)保存它,则所有位置都会被删除,因为在JSON数据中找不到任何位置。

更新User对象属性的最佳和最干净的方法是什么,而不是它的关系?

2 个答案:

答案 0 :(得分:1)

您应该从Realm中获取现有用户,然后更改其属性,这样您就可以保留以前保存的位置。

答案 1 :(得分:0)

空值仍被视为有效输入,因此,如果您传入的JSON字符串中存在locations但为空,则Realm假设这意味着您要删除其中的所有内容。

避免这种情况的最简单方法是确保将名为locations的空密钥传递给Realm。 Realm只会更新您明确提供的属性。如果它存在,您可以尝试将其从JSON文件中删除,或者如果检测到它是空的,则修改您的ObjectMapper逻辑以跳过它。