ios - react swift : Observe Managed Object changes with MutableProperty

标签 ios swift core-data reactive-cocoa reactive-swift

我的项目有 CoreData 数据库,其中包含 1 个根上下文和多个子上下文。 我有一个包含项目 (NSManagedObject) 的 ViewModel。当我更改项目中的某些内容时,会在根上下文中进行持久化,然后自动合并到所有子上下文中。

我想用 ReactiveSwift 信号/属性替换 NSFetchedResultsController,以观察项目对象的变化。

View 模型:

var itemProperty: MutableProperty<Item> = MutableProperty(contextItem)

View Controller :

self.viewModel.itemProperty.signal.observeValues{ (item: Item) in
     let newName = item.name
     print("name: \(newName!)" 
 }

在我在别处更改项目名称后,更改会传播到 ViewModel 子上下文(NSFetchedResultsController 会收到通知),但信号永远不会推送新的item 事件。

可能是因为 NSManagedObject 引用永远不会改变?我知道我可以使用 producer(forKeyPath: "propertyKeyPath") 观察对象中特定属性的变化,但我不想只观察项目的一个特定属性,我想观察所有变化。

有没有办法观察所有对象属性的任何变化??

最佳答案

您可以观察 NSManagedObjectContextObjectsDidChange。这可能有些矫枉过正,因为它会在任何 对象发生任何 更改时发送通知。但我已经使用它而没有任何明显的性能影响。这是 Apple documentation .

NSManagedObjectContextObjectsDidChange 的主要缺点是它不会为您提供更改后的键或值。如果您需要,请意识到在所有属性上创建观察者可能并不像您想象的那么繁重。它可以在一个循环中完成,迭代 NSEntityDescription.propertiesits documentation 底部列出的其他四个类似属性之一。 .

关于ios - react swift : Observe Managed Object changes with MutableProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55909924/

相关文章:

objective-c - 使用 Cocoa 的可扩展服务器

ios - 带有标题的 uitableview,如 instagram 用户个人资料

random - 在 Swift 中生成一个范围内的随机整数的最简单方法是什么?

iphone - 如何在iPad上绘制折线图?

ios - 在 ViewControllers cellForItemAt indexPath 方法中设置自定义 CollectionViewCells 标签

ios - 在 Swift 4 中自动调整缩放以适应 iOS 中的所有标记

ios - 多个获取请求导致应用程序卡住

ios - CoreData iOS - 如何为对象创建唯一ID?

ios - AVAudioPlayer 缓慢降低级别

iOS 11 浏览器图像错误