2

我已经为没有 NSFetchedResultsController 实例的 iPhone 应用程序设置了核心数据。

为此,我创建了一个模型类来封装所有核心数据请求和 NSFetchRequests/NSPredicates 的构造。

这使我的 UITableViewController 中保留了所有核心数据特定代码。

现在我想添加 NSFetchedResultsController 以使填充分段 UITableView 更容易。

我的问题是:在所有示例中,我看到实例 NSFetchedResultsController 是 UITableViewController 的 ivar。这会导致在 UITableViewController 中构造所有 NSFetchedResults 语句。

我觉得这是混乱 UITableViewController 并增加了另一个责任。

你如何处理这个问题?

使用 NSFetchedResultsController 时,您的对象图是什么样的?

你在哪里构建你的 NSPredicates?

4

2 回答 2

0

我的模型类中有一堆方法可以返回各种谓词,但我在子类中构造了实际的NSFetchRequest和。我这样做的原因是因为用户可以设置关于他想要包含哪些标准的选项,所以这正确地是一个与视图控制器相关的项目,并且视图控制器需要轻松访问.NSFetchedResultsControllerUITableViewControllerNSFetchedResultsController

如果用户对此事没有任何发言权,我只会在加载时UITableViewController获得。NSFetchedResultsController

于 2009-08-20T06:37:02.723 回答
0

更新:

我已经回到在 UITableViewControllers 中构建 NSFetchedResultsControllers。

我也一直在使用 NSManagedObjectContext 上的一个类别进行查询。此外,我一直在我的 NSmanagedObject 子类的类别中添加更多逻辑。

总的来说,我对我最近使用的架构感到满意。


原答案:

我想我会发表我对此事的看法。

由于 NSFetchedResultsController 是一个 Foundation 类而不是 UIKit 类,它对我来说是一个模型。

NSFetchRequest 也是一样。

似乎构造一个 NSFetchRequest 依赖于数据模型的知识,你可能会争辩说 UITableViewController 不应该知道。

这让我对对象图应该是什么样子产生了几个想法。

一种选择是将 NSFetchedResultsController 子类化,并像工厂类一样,在其中返回完全配置的 NSFetchedResultsController 实例。这保持了 NSFetchRequest 的构造。

另一个选项非常相似,但不是继承 NSFetchedResultsController,而是创建一个 NSObject 子类或类别来处理相同的工作。

这两个选项似乎都比使用 UITableViewController 执行这些任务更符合 MVC。

于 2009-09-02T23:28:18.240 回答