我正在使用Core Data和NSFetchedResultController处理应用程序但由于很多原因我想将其切换为使用Realm。 我看到github上有一个NSFetchedResultController的“Realm版本”,但它与使用Core Data的当前代码不兼容。
视图控制器显示来自同一所学校的人员列表,如地址簿。 此列表是在同一城市学习的人的子列表。
所以我想在数据库中发出1个唯一的请求来检索所有人的列表,然后在每个学校的1个字典中本地过滤这个列表[String:AnyObject],在tableView和AnyObject中使用String作为Section name人。
第一个解决方案,为每个学校制作NSFetchedResultController,并使用谓词过滤该位置。然后所有删除操作等都由代表处理 - >这与Realm
创建这些词典并为每个操作更新它们... - >这适用于Realm,但代码非常烦人。
有更好的解决方案吗?
修改
我需要澄清我的要求: 我想编写一个继承UITableViewController的类。
由于我们可能会从CoreData迁移到Realm,因此我想编写与这两者兼容的代码,以便我以后不需要再次修改它。到目前为止我发现的唯一“智能”方法是忘记NSFetchedResultController和RBQFetchedResultsController,因为它们分别链接到CoreData和Realm,然后使用像Dictionaries这样的数据结构。
答案 0 :(得分:2)
为了澄清一下,您要创建一个包含多个部分的UITableView
;每个学校1个,你想根据他们的学校将Realm数据库中的人员列表排序到表中,对吗?
如果Realm获取了你提到的结果控制器(我猜测它RBQFetchedResultsController)并不适合你应用程序的架构,那么是的,词典就是要走的路,但它不应该像手工一样“手动”。正如你想的那样。
Realm Results
对象的好处在于它们的生活'在某种意义上,如果在Results
查询后将新项目添加到Realm,则会追溯更新以包含新项目。既然如此,只要您管理Results
对象的字典,每个对象都与为每个特定学校提取人员相关,唯一的手动方面就是管理表格部分本身。
唯一需要注意的是,您需要一种机制,以便在将新人添加到特定学校时通知(以便知道刷新表格视图的该部分),但是现在,最好是用你自己的逻辑(通过回调块或委托调用)来做到这一点。
在旁注中,我们正在添加一组新API,以便在Realm中实现本机获取结果控制器行为(即,在添加新对象时自动发布通知的需要) 。我们还没有确认合适的发布日期,但它应该在2016年第一季度之内! :)