我正在使用Realm
,我会从不同的操作中获取/设置realm对象的属性,这些操作会添加到一个NSOperationQueue
。
假设在operation0中,我将realm对象的属性设置为新值,然后我将operation1添加到同一个操作队列,operation1获取realm对象的属性,该属性可能获得旧值,因为线程运行operation1可能与operation0。
我该如何解决这个问题?任何建议都会受到赞赏。
答案 0 :(得分:2)
听起来你需要保证operation1
只有在operation0
成功完成设置Realm写入事务后才会开始执行。
有两种方法可以解决这个问题:
<强> 1。使操作队列成为串行。将队列的maxConcurrentOperationCount
属性设置为1,这样即使您同时向队列添加操作,它们也只能在它们被添加的顺序。
<强> 2。使operation1
依赖于operation0
。如果您需要将操作队列保持并发,则可以使用NSOperation.addDependency(_:)
明确确保operation1
仅开始一次operation0
已完成。
在operation1
中,请务必致电您Realm
对象上的refresh()
以获取您的Realm对象,以确保您所做的更改operation0
已在该队列中正确公开。