MVVM CoreData FetchedReusltsController
Posted
技术标签:
【中文标题】MVVM CoreData FetchedReusltsController【英文标题】: 【发布时间】:2016-06-10 11:32:23 【问题描述】:我正在尝试将MVVM
与Objective-c
一起使用,但CoreData
出现了一些问题。我不知道谁应该处理fetchedResultsControllerDelegate
方法。 viewModel
或 viewController
?
我认为 viewModel 应该处理它,但我看到太多代码来做同样的事情。
【问题讨论】:
你的理由是什么?您是否将视图模型视为轻量级的瞬态事物或长期持久的事物 - 即当单元被重用或在大数组中维护时被破坏? 【参考方案1】:假设您在视图中有一个编辑按钮。当 fetchResultsController 中没有对象并且您想在添加任何对象时显示它时,编辑按钮是隐藏的。
如果你在viewController中实现NSFetchedResultsControllerDelegate
:
如果你在 viewModel 中实现NSFetchedResultsControllerDelegate
:
如果你在 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 模型正确插入排序描述符?
《Android构建MVVM》系列 之 MVVM架构快速入门