处理非持久性属性的最佳实践,频繁更新

时间:2017-01-23 20:44:03

标签: swift3 realm

我是新手,并没有找到满足我的解决方案。

我有一个应用程序,我可以用gps数据记录游览等等。 (有多个不同的对象存储在领域中)。 我创建了一个领域单例,它应该为我的对象做所有的领域(更新,创建,删除)。

现在我遇到了以下问题: 我开始游览并记录下来。首先它被创建,一切都很好。然后我来到了我必须更新我的旅游对象和只有几个属性(基本上每个新的GPS点更新它)的点。另一个要求是,可以存在属性,这些属性在领域中不是持久的,并且仅在对象实例上。

所以现在我可以选择调用realm.add(object,update:true)来覆盖所有属性。 我不能说object.prop1 = asdf,object.pro2 = 345,因为我的逻辑层没有写上下文。所以我可以在realm.create中更新(type,updatedict,update:true) 但这种方法的最大缺点是,我必须再次重新获取对象以“知道”对象实例上的更改。

因此更新对象的某些属性会导致: 创建包含id(主键)和要更改的属性的字典 在我的领域单身人士上调用更新并传递所有必要的数据。 在我的realm实例上调用fetch以再次获取新对象,这导致我松散现有的不持久属性值。

我怀疑我是第一个有这样要求的人,但我找不到解决方案:

要点: Realm Singleton类处理写入上下文中的所有Realm操作 不同的Realm对象类,可以没有持久对象 需要部分更新某些属性 不希望在我的viewcontrollers逻辑中有域代码,只在其管理器中。

1 个答案:

答案 0 :(得分:0)

很难在没有任何代码示例的情况下提出建议,但我个人认为没有能力更新模型的各个属性并不是一个好主意。

我认为你有两个选择:

  1. RealmSingleton添加一个方法,允许您获取写入上下文(在写入事务中执行块),如:

    func updateTour(updateBlock: (Tour) -> Void) {
        realm.write {
            updateBlock(currentTour)
        }
    }
    
    ...
    
    RealmSingleton.shared.updateTour { tour in
        tour.property = value
    }
    
  2. 添加便捷方法以更新Tour对象的各个属性:

    RealmSingleton.shared.setTourProperty(value)