我应该使用NSFetchedResultController还是字典?

时间:2016-01-27 07:27:23

标签: ios objective-c swift core-data realm

我正在使用Core Data和NSFetchedResultController处理应用程序但由于很多原因我想将其切换为使用Realm。 我看到github上有一个NSFetchedResultController的“Realm版本”,但它与使用Core Data的当前代码不兼容。

视图控制器显示来自同一所学校的人员列表,如地址簿。 此列表是在同一城市学习的人的子列表。

所以我想在数据库中发出1个唯一的请求来检索所有人的列表,然后在每个学校的1个字典中本地过滤这个列表[String:AnyObject],在tableView和AnyObject中使用String作为Section name人。

  1. 第一个解决方案,为每个学校制作NSFetchedResultController,并使用谓词过滤该位置。然后所有删除操作等都由代表处理 - >这与Realm

  2. 不兼容
  3. 创建这些词典并为每个操作更新它们... - >这适用于Realm,但代码非常烦人。

  4. 有更好的解决方案吗?

    修改

    我需要澄清我的要求: 我想编写一个继承UITableViewController的类。

    • 此类包含按字母顺序排序的人员列表
    • tableview的第一个字母是
    • tableview控制器需要处理数据模型的更新(插入,更新,删除)

    由于我们可能会从CoreData迁移到Realm,因此我想编写与这两者兼容的代码,以便我以后不需要再次修改它。到目前为止我发现的唯一“智能”方法是忘记NSFetchedResultController和RBQFetchedResultsController,因为它们分别链接到CoreData和Realm,然后使用像Dictionaries这样的数据结构。

1 个答案:

答案 0 :(得分:2)

为了澄清一下,您要创建一个包含多个部分的UITableView;每个学校1个,你想根据他们的学校将Realm数据库中的人员列表排序到表中,对吗?

如果Realm获取了你提到的结果控制器(我猜测它RBQFetchedResultsController)并不适合你应用程序的架构,那么是的,词典就是要走的路,但它不应该像手工一样“手动”。正如你想的那样。

Realm Results对象的好处在于它们的生活'在某种意义上,如果在Results查询后将新项目添加到Realm,则会追溯更新以包含新项目。既然如此,只要您管理Results对象的字典,每个对象都与为每个特定学校提取人员相关,唯一的手动方面就是管理表格部分本身。

唯一需要注意的是,您需要一种机制,以便在将新人添加到特定学校时通知(以便知道刷新表格视图的该部分),但是现在,最好是用你自己的逻辑(通过回调块或委托调用)来做到这一点。

在旁注中,我们正在添加一组新API,以便在Realm中实现本机获取结果控制器行为(即,在添加新对象时自动发布通知的需要) 。我们还没有确认合适的发布日期,但它应该在2016年第一季度之内! :)