Ios 核心数据:为什么必须调用重新加载数据才能使我的应用程序工作?
我整晚都在调试一个简单的应用程序。该应用程序从web上检索一张图像(是的,一张..希望让我的生活更轻松),并将其显示在表视图中。我这样做是为了学习核心数据。在修复之前,错误消息显示如下: 2012-09-30 06:16:12.854缩略图[34862:707]核心数据:错误:严重 应用程序错误。从的代理捕获到异常 调用时NSFetchedResultsController -controllerDidChangeContent:。无效更新:节数无效。之后表视图中包含的节数 更新(1)必须等于中包含的节数 更新前的表视图(0),加上或减去 插入或删除的节(0个插入,0个删除)。使用userInfo (空) 基本上是说,FRC委托方法出了问题。一方面,节号从0变为1。另一方面,“插入0,删除0”。那么,如何增加节数?这不应该发生。。因此出现了错误 我只需将Ios 核心数据:为什么必须调用重新加载数据才能使我的应用程序工作?,ios,core-data,Ios,Core Data,我整晚都在调试一个简单的应用程序。该应用程序从web上检索一张图像(是的,一张..希望让我的生活更轻松),并将其显示在表视图中。我这样做是为了学习核心数据。在修复之前,错误消息显示如下: 2012-09-30 06:16:12.854缩略图[34862:707]核心数据:错误:严重 应用程序错误。从的代理捕获到异常 调用时NSFetchedResultsController -controllerDidChangeContent:。无效更新:节数无效。之后表视图中包含的节数 更新(1)必须等于中
[self.tableView reloadData]
添加到我的FRC设置方法中,即可修复该错误。我从中得到了灵感,但我不太明白。答案似乎太复杂,而且项目太具体。有人能解释一下为什么添加reloadData
可以修复这个bug吗?我希望答案很简单
我的应用程序的关键组件(如果重要):
- 使用
建立核心数据堆栈UIManagedDocument
- 创建一个帮助器方法从Flickr API下载图像
- 在NSManagedObject子类文件中,尝试从持久存储中获取图像。如果还没有,请将其插入主运行中心
- (void)setupFetchedResultsController { NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"BigImage" inManagedObjectContext:self.document.managedObjectContext]; [fetchRequest setEntity:entity]; NSSortDescriptor *imageDescriptor = [[NSSortDescriptor alloc] initWithKey:@"image" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObject: imageDescriptor]; [fetchRequest setSortDescriptors:sortDescriptors]; [fetchRequest setFetchBatchSize:20]; // Create fetch results controller self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.document.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"]; self.fetchedResultsController.delegate = self; NSError *error; if (![self.fetchedResultsController performFetch:&error]) { NSLog(@"Error in performFetch: %@, %@", error, [error userInfo]); } // Critical!! I add this line to fix the bug! [self.tableView reloadData]; }
didChangeSection
,didChangeObject
等将这些更改传播到表视图
但是没有自动机制将初始获取的结果发送到表视图。这就是为什么您必须在performFetch
之后调用reloadData
然而,在某种情况下,这似乎是自动工作的
UITableViewController
调用视图中的reloadData
(如果表是第一次加载的)。因此,如果您在viewDidLoad
中设置FRC,则reloadData
将在视图中调用,您不必手动调用它。这正是我需要知道的。你帮了我大忙!谢谢大家!你救了我的命!