【发布时间】:2013-08-22 14:01:56
【问题描述】:
我正在我的 ViewControllers 中使用 RestKit 和 NSFetchedResultsController 构建一个 iOS 应用程序,如以下教程中所述:http://www.alexedge.co.uk/blog/2013/03/08/introduction-restkit-0-20
我有一个 UITableViewController 的子类,它显示 NSFetchedResultsController 获取的数据,它运行良好。
现在我想过滤显示的数据,因此我向 NSFetchedResultsController 的获取请求添加谓词并再次执行获取(我不使用任何缓存):
[self.fetchedResultsController.fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"title like 'some text'"]];
NSError *error = nil;
[self.fetchedResultsController performFetch:&error];
NSAssert(!error, @"Error performing fetch request: %@", error);
没有发生错误,但表格视图没有更新。我期待这个方法被调用
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller;
但不是……
更糟糕的是,当我记录这样获取的对象的数量时
NSLog(@"before refetch : %d objects", self.fetchedResultsController.fetchedObjects.count);
[...]
NSLog(@"after refetch : %d objects", self.fetchedResultsController.fetchedObjects.count);
我来了
before refetch : 18 objects
after refetch : 0 objects
(这可能是我尝试滚动表格视图时应用程序崩溃的原因)
那么我应该如何刷新 NSFetchedResultsController 的内容以便调用 controllerDidChangeContent 从而重新加载表格视图?而且 fetchedObjects 包含一些东西......
编辑: 如果此时我调用 RestKit 对象管理器来获取显示在表视图中的数据并且 Internet 连接可用,那么 NSFetchedResultsController 将被更新并且表视图以及带有谓词的获取请求的正确结果。
编辑: 我使用的谓词是问题的原因(我认为)。我的实体有一个可转换的属性,该属性是从字符串的 JSON 数组和谓词测试中解析的,如果该数组中存在搜索字符串:
[NSPredicate predicateWithFormat:@"ANY transformable_attribute like 'search string'"]
奇怪的是,如果我在没有谓词的情况下加载结果并在之后添加它,那么我会得到 0 个对象,但是如果我直接使用谓词加载结果,那么我会得到 3 个对象。 我的谓词错了吗?
编辑:是的!看起来我们不能断言可转换的属性。我不知道为什么它第一次起作用。
【问题讨论】:
标签: ios core-data restkit nsfetchedresultscontroller restkit-0.20