Swift-如何在不迭代领域对象集合的情况下批量更新对象

时间:2019-06-06 06:44:05

标签: ios swift realm realm-mobile-platform

我的realmDB中有近十万条记录,我希望每次用户根据同一表中的其他属性更改设备时区时都重新计算一个特定属性。

示例:

    class Activity: Object {
        // In UTC received from server
         dynamic var effectiveDate: Date? 
        // Needs to be re-calculated everytime user launches the app based on `effectiveDate`
         dynamic var effectiveDay: Date? 
   }

假设:我的领域表中有100,000个这样的活动记录,称为Activities

此外,领域指出,将KVC应用于集合是一种批量更新对象的好方法,而无需在为每个项目创建访问器时遍历集合的开销。

对于我来说,不是为每个记录设置相同的值,而是要使用KVC为每个记录基于effectiveDay属性重新计算effectiveDate,以避免迭代的开销。有可能吗?

1 个答案:

答案 0 :(得分:1)

简短答案:

  

如果不遍历领域的集合就不可能   对象。

长答案:

  

领域是基于模型类的数据库。它不支持任何   像SQLite这样的查询(谓词或过滤器主要用于检索具有特定条件的数据)意味着我们无法使用realm来更新单个查询中的所有记录。所以你的问题的答案很漂亮   简单,如果不进行迭代,就无法更新值。

如果要更改某些对象的值,可以提高性能。

代码:

let persons = realm.objects(Person.self).filter("id IN %@", ids)
try! realm.write {
    persons.first?.setValue(true, forKeyPath: "isFirst")
    // set each person's planet property to "Earth"
    persons.setValue("Earth", forKeyPath: "planet")
}