我有一个带有过渡属性的NSManagedObject
子类,该属性基本上是对多个持久关系之一的重新格式化。我通过观察与KVO的关系并在-awakeFromFetch
,-awakeFromInsert
等中注册观察者来做到这一点。
这一切都很好,但是,如果我使用对象的objectID
和-objectWithID:
技术在线程之间传递对象,则没有生命周期方法可以挂接瞬态属性的生成。实际上,没有一个生命周期方法被触发,因为使用id直接访问该对象不被认为是访存。
有很多解决方法,但是最好使用基于生命周期的技术。我可能想念什么吗?我可以使用另一种标准方法吗?
谢谢
编辑:示范项目https://mega.co.nz/#!UsNBTZ7S!UU1qaFuc4W6Z2EYey-9AiMyfM8203Zfrm1lfpG5QITU
我有一个带有暂态属性的NSManagedObject子类,该属性基本上是对多个持久性关系之一的重新格式化。我通过观察与KVO和...
[当您在具有上下文的一个线程上具有NSManagedObject
实例,然后从其他线程和不同的上下文中检索它时,将触发-awakeFromFetch
或-awakeFromInsert
。
[好,所以回答我自己的问题,是由于objectWithID:
总是返回一个对象,即使该对象未在接收者管理的对象上下文中注册,也引起了该问题。在某些情况下,objectRegisteredForID:
似乎提供更多信息。无论如何,结论是生命周期方法可以触发,但是要小心objectWithID:
,因为它可能导致对象不一致。
NSManagedObjectContext
上创建了一个通过常规获取路径的扩展来解决,因此触发了所有预期的生命周期方法: