MVVM CoreData FetchedReusltsController

Posted

技术标签:

【中文标题】MVVM CoreData FetchedReusltsController【英文标题】: 【发布时间】:2016-06-10 11:32:23 【问题描述】:

我正在尝试将MVVMObjective-c 一起使用,但CoreData 出现了一些问题。我不知道谁应该处理fetchedResultsControllerDelegate 方法。 viewModelviewController?

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

【问题讨论】:

你的理由是什么?您是否将视图模型视为轻量级的瞬态事物或长期持久的事物 - 即当单元被重用或在大数组中维护时被破坏? 【参考方案1】:

假设您在视图中有一个编辑按钮。当 fetchResultsController 中没有对象并且您想在添加任何对象时显示它时,编辑按钮是隐藏的。

如果你在viewController中实现NSFetchedResultsControllerDelegate

ViewController 获取有关模型更改的通知 ViewController 必须通知 ViewModel 发生了与 型号 ViewModel 必须更改 editButtonShown 的值 财产 ViewModel 必须通知 viewController 更新 查看

如果你在 viewModel 中实现NSFetchedResultsControllerDelegate

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 吗?

以上是关于MVVM CoreData FetchedReusltsController的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI CoreData MVVM 解决错误“EXC_BAD_INSTRUCTION....”

如何为此 SwiftUI CoreData 模型正确插入排序描述符?

在 MVVM 应用程序中访问核心数据堆栈

《Android构建MVVM》系列 之 MVVM架构快速入门

[WPF] 使用 MVVM Toolkit 构建 MVVM 程序

MVVM Light和MVVM有什么区别?