iOS核心数据关系一对多与fetchedResultsController速度

时间:2015-02-07 12:57:52

标签: ios core-data

我使用Core-Data存储来自联系人的消息

我创建了一个"联系人"表和"消息"表

  • 每条消息与联系人
  • 都有一对一的关系
  • 每个联系人与每个联系人的消息都有一对多的关系

现在,为了显示消息,我使用一个简单的fetchedResultsController,并将联系人作为谓词。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contact = %@", self.contact];

一旦消息的数量开始结束,加载需要一些时间,因为我无法从他们的关系中索引消息。

我知道我可以访问该关系中的所有联系人消息,但我还需要类似于

的内容
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath

为了在有新消息显示时更新视图...

我想我的问题是:

  1. 当消息数量产生后,访问来自联系人一对多关系的消息会比 fetchedResultsController 更快吗?
  2. 我可以订购从最新到最老的消息吗?
  3. 我可以在没有fetchedResultController的情况下跟踪联系人消息的任何变化吗? (可以更改/添加/删除消息)
  4. OR 是否只有一种方法可以使用关系索引消息表?
  5. 对于 3。我知道我可以收听任何NSManagedObjectContextObjectsDidChangeNotification,但问题是我不在乎其他联系人是否在我发送消息时发送消息。另一个......我还没有找到一种聪明的方法来使用KVO来制作这个模型。

1 个答案:

答案 0 :(得分:0)

您最好的选择是保留FRC并将配置请求配置为适当批处理。可以说,您不需要一直在设备上显示所有旧消息,并且可以在达到特定年龄时删除,然后在用户需要时从服务器进行查询。

对于排序,您需要向实体添加一个属性并设置它(如果您还没有),然后在获取请求中设置排序描述符。