Core Data 不再触发对关系更改的绑定
Core Data no longer firing binding on changes to relationship
我将 MVVM 用于许多复杂视图,在这些视图中,我将核心数据模型对象绑定到视图模型,而视图模型又绑定到我的视图。例如,Model.children 绑定到 ViewModel.children,ViewModel.children 绑定到 View.presentedChildren。
直到最近,这种方法一直很有效。当从 Model.children 中删除一个子项时,所有绑定都按预期触发了行,并且视图更新以反映模型对象的当前状态。但是,自升级到 Xcode 7 后,绑定不会触发。它们在最初设置绑定时按预期工作,但是如果子关系被修改,则绑定永远不会触发。
添加到模型对象的子关系中的 KV 观察器会触发。
我显然遗漏了一些东西。任何提示将不胜感激。
仅供参考,针对 10.11 进行编译,但在 10.10 中 运行。
[更新]
我用 addObserver: 替换了 bind: 对关系的调用,并实现了 observeValueForKeyPath: 如下:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
[self setValue: [object valueForKey: keyPath]
forKey: keyPath];
}
这有效,但没有解释在绑定的实现中发生了什么变化:对于 NSObject 或 NSManagedObject。
好吧,我也为我的应用程序的这个区域采用了 Reactive Cocoa 绑定,一切又恢复了。
我将 MVVM 用于许多复杂视图,在这些视图中,我将核心数据模型对象绑定到视图模型,而视图模型又绑定到我的视图。例如,Model.children 绑定到 ViewModel.children,ViewModel.children 绑定到 View.presentedChildren。
直到最近,这种方法一直很有效。当从 Model.children 中删除一个子项时,所有绑定都按预期触发了行,并且视图更新以反映模型对象的当前状态。但是,自升级到 Xcode 7 后,绑定不会触发。它们在最初设置绑定时按预期工作,但是如果子关系被修改,则绑定永远不会触发。
添加到模型对象的子关系中的 KV 观察器会触发。
我显然遗漏了一些东西。任何提示将不胜感激。
仅供参考,针对 10.11 进行编译,但在 10.10 中 运行。
[更新]
我用 addObserver: 替换了 bind: 对关系的调用,并实现了 observeValueForKeyPath: 如下:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
[self setValue: [object valueForKey: keyPath]
forKey: keyPath];
}
这有效,但没有解释在绑定的实现中发生了什么变化:对于 NSObject 或 NSManagedObject。
好吧,我也为我的应用程序的这个区域采用了 Reactive Cocoa 绑定,一切又恢复了。