iphone - 我如何刷新/重新加载以更新对我的谓词的更改并因此获取请求?

标签 iphone objective-c uitableview nspredicate nsfetchedresultscontroller

您好,我目前有一个表格 View ,它正在通过核心数据进行填充。

我使用 NSPredicate 限制结果,以便只有具有相同 OrderNumber 的项目才会显示在 tableView 中。

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                                @"orderNumber == %@",     orderNumberLabel.text];
NSLog(@"predicate is: %@",predicate);
[fetchRequest setPredicate:predicate];

输入订单的表单完成后,按下按钮 [保存订单],然后订单号和订单号标签加一。

我希望发生的是 tableView 应该为空,因为新的 orderNumber 在 sql 数据库中没有条目。但是,这不会发生并调用 [myTableView reloadData];也没有解决。

但是,如果我退出项目并重新运行它,我会得到新的 orderNumber 和一个空的 tableView。因此,在运行时发生了一些事情,设置了获取请求和谓词,我需要尝试通过调用 saveOrderButtonPressed 方法进行复制。唯一的问题是我不知道该怎么做,有人可以帮忙吗?

有时,在输入订单后退出并重新运行应用程序后,我也会遇到以下错误。这与我更改 orderNumber 有关,但我认为一旦我更新 predicate/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:。希望您已连接委托(delegate),以便您的 TableView 自动刷新。 您没有说您正在做任何会导致问题的事情(更改谓词、排序顺序等)- 您确定不是吗?

关于iphone - 我如何刷新/重新加载以更新对我的谓词的更改并因此获取请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7800857/

相关文章:

objective-c - Cocoa - 当按下按键时 NSCursor 重置为默认光标

objective-c - AVAudioPlayer 播放时音量变化

iphone - 音频 Controller 停止按钮

ios - NSUserDefaults 不会一致地加载数据

ios - 为什么编辑器里预览给错iphone型号

iphone - 无法更改 UITableViewCell 背景颜色

iphone - 更改 UITableViewCell 的图像

ios - 异常 'NSInternalInconsistencyException' ,原因 : 'Could not load NIB in bundle: . ..有人可以找出这有什么问题吗

ios - 更改 spritekit 中的初始场景

objective-c - 如何访问父类(super class)实例变量?