【问题标题】:MVC with NSFetchedResultsController带有 NSFetchedResultsController 的 MVC
【发布时间】:2014-05-17 21:44:01
【问题描述】:

这里有点新手,有一个关于架构的一般问题。

我有一个带有两个独立视图的 iOS 应用程序,它们都与同一个核心数据模型通信。

我已经为其中一个视图实现了一个 NSFetchedResultsController 作为本地属性。很多委托方法要实现...

  • (void)controllerWillChangeContent:(NSFetchedResultsController *)controller

  • (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type

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

  • (void)controllerDidChangeContent:(NSFetchedResultsController *)controller

  • (NSFetchedResultsController *)fetchedResultsController

...其中大部分是样板文件,但我想避免只是将这些复制/粘贴到另一个视图中。

有什么建议可以重新架构以避免这种异端......?

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    首先,我希望您在提到视图时指的是“视图控制器”。将此代码放入UIView 子类将是非常糟糕的设计。这是控制器代码,所以不要放在视图中。

    至于限制重复,您使用的是面向对象的语言,因此一种可能性是让这两个视图控制器都从一个公共父类继承。将重复的代码移动到父级中,并让每个视图控制器调用super 的实现,然后再执行它们自己的实现所需的任何操作。这可能需要注意确保超类的实现对于它的两个子类都足够通用。如果这被证明非常困难,则可能是代码不够通用,无法进行重构。

    【讨论】:

    • Tom - 是的,视图控制器,而不是 UIViews。这是一个顶级提示。会让你知道我是怎么过的。谢谢!
    • 其实一个是UICollectionView,一个是UITableView,所以不要以为我可以从单个类继承。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多