MVVM CoreData FetchedReusltsController

cro*_*dor 6 objective-c mvvm nsfetchedresultscontroller

我正在尝试开始使用MVVMwithObjective-c但我遇到了一些问题CoreData。我不知道该由谁来处理这些fetchedResultsControllerDelegate方法。该viewModel还是viewController

我认为 viewModel 应该处理它,但我看到太多的代码来做同样的事情。

小智 4

假设您在视图中有一个编辑按钮。当 fetchResultsController 中没有对象时,编辑按钮会隐藏,而您希望在添加任何对象时显示它。

如果你NSFetchedResultsControllerDelegate在viewController中实现:

  • ViewController 获取有关模型更改的通知
  • ViewController 必须通知 ViewModel 模型发生了一些事情
  • ViewModel 必须更改 editButtonShown 属性的值
  • ViewModel必须通知viewController更新视图

如果您NSFetchedResultsControllerDelegate在 viewModel 中实现:

  • model 通知 viewModel 有关更改的信息
  • viewModel 更改 editButtonShown 属性并向 viewController 发送通知

如果你在 viewController 中实现这些方法,那么它就会获得对模型的引用,这在 MVVM 中不应该发生

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

我认为正确的解决方案是在 ViewModel 中实现NSFetchedResultsControllerDelegate。那么你应该有类似的协议来通知 viewController 更新视图,但它应该与 viewModels 一起使用,而不是与模型一起使用

  • 我自己一直在争论这个问题,但仍然不相信你的答案,但它确实给出了一些清晰的信息。我特别困惑如何处理我的“tableView”?当我的“NSFetchedResultsController”获得“didChangeObject”时,不会有很多不必要的来回更新“tableView”吗? (3认同)