mse*_*sec 6 iphone objective-c uitableview nspredicate nsfetchedresultscontroller
嗨我目前有一个表视图,通过核心数据填充.
我使用NSPredicate限制结果,以便只有具有相同OrderNumber的项目才会显示在tableView中.
NSPredicate *predicate = [NSPredicate predicateWithFormat:
                                @"orderNumber == %@",     orderNumberLabel.text];
NSLog(@"predicate is: %@",predicate);
[fetchRequest setPredicate:predicate];
一旦完成了输入订单的表单,按下按钮[保存订单],然后将orderNumber加1,以及orderNumberLabel.
我期望发生的是tableView应该是空的,因为新的orderNumber在sql数据库中没有条目.但是这不会发生并调用[myTableView reloadData]; 也解决不了.
但是,如果我退出项目并重新运行它,我有新的orderNumber和一个空的tableView.因此,在运行时发生了一些事情,其中设置了获取请求和谓词,我需要尝试通过saveOrderButtonPressed方法中的调用进行复制.唯一的问题是我不知道该怎么做,有人可以帮忙吗?
有时在输入订单后退出并重新运行应用程序后,我也遇到以下错误.它与我更改orderNumber有关,但我认为一旦我更新谓词/ fetchRequest它就会消失.我还需要一些指导,我需要禁用缓存吗?
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason:'FATAL ERROR: The persistent cache of section information does not match 
the current configuration.  You have illegally mutated the NSFetchedResultsController's
fetch request, its predicate, or its sort descriptor without either disabling 
caching or using +deleteCacheWithName:'
你是对的NSFetchedResultsController.它完全是为您描述的用途而制作的.正如错误消息所示,您可以将NSFetchedResultsController的缓存设置nil为完全禁用缓存 - 当您拥有的项目非常少时,不会产生很大的性能损失.或者,您可以使用+deleteCacheWithName:分配给缓存的名称.只有这样才能更改获取请求(例如谓词),然后您必须performFetch:再次执行.希望您将代理连接起来,以便自动刷新表视图.你没有说你正在做任何会导致问题的事情(改变谓词,排序顺序等) - 你确定你不是吗?
| 归档时间: | 
 | 
| 查看次数: | 7043 次 | 
| 最近记录: |