我正在使用一些类来处理 Core Data
和远程 JSON
服务之间的同步,并且在其中一个类中管理当前在 Core 中的对象数据
,我随机发生了几次崩溃。
方法
类别
@interface XLLocalDataLoader() <NSFetchedResultsControllerDelegate>
// private properties
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
方法
// get core data object at index path
-(NSManagedObject *)objectAtIndexPath:(NSIndexPath *)indexPath
{
if ([indexPath row] < [self numberOfRowsInSection:indexPath.section]){
return [self.fetchedResultsController objectAtIndexPath:indexPath];
}
return nil;
}
源代码
源代码可在 GitHub -> XLDataLoader -> XLLocalDataLoader 获取。 .
错误
Fatal Exception: NSInvalidArgumentException Object's persistent store is not reachable from this NSManagedObjectContext's coordinator
已调查
- NSFetchedResultsController crashes on objectAtIndexPath?
- NSFetchedResultsController objectAtIndexPath crash (EXC_BAD_ACCESS)
- NSFetchedResultsController Crash
- NSFetchedResultsController objectAtIndex, objectAtIndexPath, indexPathForObject inconsistencies
- Deleting last row in a section -> crash, using NSFetchedResultsController
问题
- 是否有一些尝试重现和调试
NSInvalidArgumentException
的指南? - 对我做错了什么有什么想法吗?
最佳答案
在“加载器”类中使用获取的结果 Controller 似乎是错误的方法。
获取结果 Controller 实际上是为了帮助您在 TableView 中显示核心数据内容。显然,正常的用例是在主线程上运行它。
如果您从 Web 服务获取数据并可能在成功处理程序中解析它,这意味着它位于不同的线程上。您必须使用单独的上下文(通常是主上下文的子上下文),然后在完成数据操作后保存此上下文。这会将更改推送到主上下文,并且将通过委托(delegate)通知获取的结果 Controller 。
该错误消息似乎还表明您没有正确管理上下文。
关于ios - NSFetchedResultsController :objectAtIndexPath: causes NSInvalidArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32652065/