- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的应用程序中有两个 UIViewControllers
(与这个问题相关)。
他们每个人都有一个 NSFetchedResultsController
,对同一个名为 News
的 entity
发出请求。它们也有相同的排序描述符,并且使用相同的 UITableViewCell
子类来显示所有内容。它们也都符合 NSFetchedResultsControllerDelegate
并运行委托(delegate)方法。
唯一的区别是第一个 View Controller ,我将其称为 SummaryVC
,只显示第一个(最多)6 个获取的对象。而另一个 NewsFeedVC
显示了所有对象,它还会对更多对象的下载进行分页。因此 SummaryVC
中的委托(delegate)方法只运行 [self.tableView reloadData];
首次启动应用程序时,会显示 SummaryVC
并触发下载前 6 个 News
对象(从 JSON 转换而来)并将它们保存在 BG 线程中。
FRC
然后选择保存并显示实体。
但是……
在应用程序的不同部分之间推送和弹出后间歇性地(我讨厌这个词)。我返回 SummaryVC
,应用程序将崩溃。
它总是同样的崩溃。
CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. *** -[_PFArray objectAtIndex:]: index (46) beyond bounds (6) with userInfo (null)
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[_PFArray objectAtIndex:]: index (46) beyond bounds (6)'
在这种情况下,已经有超过 6 个实体加载到 Core Data 中。 6 让我怀疑属于 SummaryVC
的 FRC
。
我已经尝试了几种方法来解决这个问题。
viewWillDisappear
上将 FRC
委托(delegate)设置为 nil。viewWillDisappear
上将 FRC
设置为 nil。VC
实际上是屏幕上的 VC
。NewsFeedVC
viewWillDisappear
中,它现在取消了队列中的所有下载操作。问题似乎是 saveContext
被 FRC
获取的结果。即,如果我进入 NewsFeedVC
并触发下载,然后在它完成之前弹出 VC,那么这似乎会触发崩溃。
现在,代码明智。崩溃永远不会发生在我自己的代码中。
我可以显示FRC
设置...
- (NSFetchedResultsController *)fetchedResultsController
{
if (!_fetchedResultsController) {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"News"];
NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
NSSortDescriptor *sourceSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"source" ascending:YES];
NSSortDescriptor *titleSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES];
fetchRequest.sortDescriptors = @[dateSortDescriptor, sourceSortDescriptor, titleSortDescriptor];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.moc sectionNameKeyPath:nil cacheName:@"AllNewsItems"];
_fetchedResultsController.delegate = self;
NSError *error = nil;
[_fetchedResultsController performFetch:&error];
if (error) {
NSLog(@"Error performing fetch: %@, %@", error, [error userInfo]);
}
}
return _fetchedResultsController;
}
我在想也许我应该将 FRC 从一个对象传递到另一个对象。 IE。将它注入(inject)一个属性,以便只有一个。这是正确的做法吗?
编辑
这可能与哥特式获取结果 Controller 使用相同的缓存名称有关吗?
EDIT2
不,如果我更改缓存名称,它仍然会崩溃。
EDIT3
好的,我每次都可以复制这个。如果我启动 NewsFeedVC
滚动,然后在滚动时我弹回 SummaryVC
,就会发生这种情况。
最佳答案
感谢 Martin R 的修复。
我从 FetchedResultsController 的初始化中删除了 cacheName
,它解决了这个问题。
谢谢。
关于ios - 推送后保存 objectAtIndex 时 NSFetchedResultsController 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20394372/
我正在尝试使用具有混合语言数据的 FRC,并希望有一个部分索引。 从文档看来您应该能够覆盖 FRC - (NSString *)sectionIndexTitleForSectionName:(NSS
使用等效的 NSFetchRequest 重新创建 NSFetchedResultsController 时,为什么 [NSFetchedResultsController PerformFetch:
我正在尝试起草一个可重复使用的类,该类基本上可重复用于具有几乎相同实现的多个实体。基本上我将有几个 UIViewController,每个都包含 UIView,其中包含 UITableView 以及由
我有一个 iPhone 和一个 Android 应用程序。在 iPhone 上,我使用 NSFetchedResultsController 来管理我的 UITableView 的数据。目前我有很多数
NSFetchedResultsController 监视对正在跟踪的整个托管对象的更改。每当在当前上下文中修改任何属性时,例如 – controller:didChangeObject:atInde
自 1 个月以来,我一直在使用 NSFetchedResultsController 构建应用程序,并在 3.1.2 SDK 上测试该应用程序。问题是我一直在我的应用程序中到处使用 NSFetched
我有一个人物和宠物的数据库,具有一对多关系 人宠物 姓名 姓名 宠物>主人 我正在使用由核心数据支持的 UITableView 和 nsfetchedresultscontroller 来显示宠物列表
我有一个 NSFetchedResultsController,它在 TableView 中显示项目列表,包括关联实体的计数。当为此关联添加对象时(使用 addXXXObject),不会调用回调来通知
花了几个小时后,我发现无法在以下文章中由 SQLite 支持的 NSFetchedResultsController 中进行自定义排序。 NSFetchedResultsController cust
我设置了一个 NSFetchedResultsController 来填充 UITableView,基于我的“主”NSManagedObjectContext。 在计时器中,我不断地将对象添加到单独的
在我的应用程序中,我需要循环遍历核心数据中的所有实体,并且我正在使用 NSFetchedresultcontroller。 我现在正在这样做: NSArray *tempArray = [[NSArr
我正在开发我的第一个核心数据支持的应用程序,但无法弄清楚如何正确设置 NSFetchedResultsController。我有两个实体: /-----------\ /--------
我正在使用 NSFetchedResultsController 在 TableView 中显示项目: - (NSInteger)numberOfSectionsInTableView:(UITabl
我将 NSFetchedResultsController 放入我的代码中,这样我就可以对 TableView 数据进行很好的自动分段。 所以我正在运行测试以确保一切正常。我的持久存储中有一个 Boo
我如何使用带有翻译后的排序键和sectionKeyPath的NSFetchedResultsController? 问题:我在数据库中的属性“type”中有 ID,例如 typeA、typeB、typ
大家好 我的 CoreData 驱动应用程序有多个来自同一存储的数据 View ,并且全部使用 NSFetchedResultsController。目前,它们的 NSFetchedResultsCo
我想使用使用 bool 值设置的不同谓词从 NSFetchedResultsController 重新获取数据。如何刷新 NSFetchedResultsController 以获取一组新数据? -
核心数据在 NSManagedObjectContext 类中提供了“executeFetchRequest”方法,我们可以使用该方法从表中获取数据并以任何需要的方式使用它。 现在还有另一种方法,即使
我正在编写一个应用程序,一个屏幕上有两个表格。左表是文件夹列表,右表显示文件列表。当点击左侧的一行时,右侧表格将显示属于该文件夹的文件。 我正在使用 Core Data 进行存储。当文件夹的选择发生变
我有一个由 NSFetchedResultsController 管理的 TableView 。但是,我在查找或创建操作时遇到问题。当用户点击表格 View 的底部时,我正在向服务器查询另一批内容。如
我是一名优秀的程序员,十分优秀!