![](/img/trans.png)
[英]How do I observe changes in a UIControl subclass in ReactiveSwift?
[英]ReactiveSwift: Observe Managed Object changes with MutableProperty
我的项目有CoreData
数据库,有1个根上下文和多个子上下文。 我有一个包含Item( NSManagedObject
)的ViewModel
。 当我在Item中更改某些内容时,持久性在根上下文中进行,然后自动合并到所有子上下文中。
我想用ReactiveSwift
信号/属性替换NSFetchedResultsController
,以观察项目对象的变化。
视图模型:
var itemProperty: MutableProperty<Item> = MutableProperty(contextItem)
视图控制器:
self.viewModel.itemProperty.signal.observeValues{ (item: Item) in
let newName = item.name
print("name: \(newName!)"
}
在其他地方更改项目名称后,更改将传播到ViewModel
子上下文( NSFetchedResultsController
获得通知),但信号从不推送新item
事件。
也许是因为NSManagedObject
引用永远不会改变? 我知道我可以使用producer(forKeyPath: "propertyKeyPath" )
观察对象中特定属性的更改,但我不想只观察该项的一个特定属性,我想观察所有更改。
有没有办法观察所有对象属性的任何变化?
很明显经过一些研究后我发现ReactiveCocoa并没有做好与Core Data合作的准备。 仅使用ReactiveCocoa / ReactiveSwift无法接收NSManagedObject更新。
一个选项可能是使用来自NSFetchedResultsController的每次更新来更新ItemProperty,并在属性的相关信号上触发新事件:
var entityProperty: MutableProperty<MyEntity>
override func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?)
{
entityProperty.value = anObject as! MyEntity
}
另一种选择可能是获取有关我的实体中特定属性的更新的信号:
var myEntity: MyEntity
// ReactiveObjectiveC
myEntity.rac_values(forKeyPath: "name", observer: self)
// ReactiveSwift
myEntity.reactive.signal(forKeyPath: "name")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.