多个NSFetchedResultsController's with one UITableView?



视觉上,我有一个UITableViewUISegmentedControl允许"模式"选择,这将改变表格的排序顺序。

使用 NSFetchedResultsController 的,我想我应该为每个不同的排序配置保留一个单独的控制器,然后根据当前选择的"模式"在显示哪个控制器之间进行交换。

但是我可以看到,对于 4 种不同的NSFetchedResultsController,这将变得棘手,所有都发送委托消息以更新UITableView。为了解决这个问题,我计划在每个相关方法中使用一个switch()块来忽略除当前"活动"NSFetchedResultsController之外的所有方法。

这听起来是正确的方法,还是我在这里错过了一些明显的东西?

-如果用户在更新通过时更改"模式"(即在 controllerWillChangeContent:controllerDidChangeContent: 之间(,我可以看到灾难的可能性

我使用区段控件更改了几个核心数据应用程序中的排序/分组。在所有这些中,我总是只使用单个NSFetchedResultsController,并在段更改时重新查询数据库。

正如您正确意识到的那样,这是一种更简单的实现,意外错误的可能性更少,并且更具可扩展性。 例如,如果我决定根据客户反馈添加新的排序/分组细分,该怎么办?您打算继续添加多少NSFetchedResultsController?在某些时候(5或6(,它只是变得荒谬。

此外,Graver上面的评论是,您可以将他们的所有委托设置为,除了"活动委托"为nil之外,不会扩展(您必须修改许多行代码以使所有其他委托为nil,这将使维护代码变得困难。

所以我的建议是使用更简单的实现,即单个NSFetchedResultsController,并在每次段更改时重新创建它。如果您对缓存感兴趣,可以为每个段使用单独的缓存名称。可以通过连接以下内容为每个段生成唯一的缓存名称:

[NSString stringWithFormat:@"Cache_%d", segment_index]

当分段控件的选定索引被更改时,更改排序描述符并执行 Fetch 不是更合乎逻辑吗?

self.fetchedResultsController.fetchRequest.sortDescriptors = [NSArray ... ];

最新更新