ios - NSFetchedResultsController :objectAtIndexPath: causes NSInvalidArgumentException

标签 ios core-data crash

我正在使用一些类来处理 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

已调查

  1. NSFetchedResultsController crashes on objectAtIndexPath?
  2. NSFetchedResultsController objectAtIndexPath crash (EXC_BAD_ACCESS)
  3. NSFetchedResultsController Crash
  4. NSFetchedResultsController objectAtIndex, objectAtIndexPath, indexPathForObject inconsistencies
  5. Deleting last row in a section -> crash, using NSFetchedResultsController

问题

  1. 是否有一些尝试重现和调试 NSInvalidArgumentException 的指南?
  2. 对我做错了什么有什么想法吗?

最佳答案

在“加载器”类中使用获取的结果 Controller 似乎是错误的方法。

获取结果 Controller 实际上是为了帮助您在 TableView 中显示核心数据内容。显然,正常的用例是在主线程上运行它。

如果您从 Web 服务获取数据并可能在成功处理程序中解析它,这意味着它位于不同的线程上。您必须使用单独的上下文(通常是主上下文的子上下文),然后在完成数据操作后保存此上下文。这会将更改推送到主上下文,并且将通过委托(delegate)通知获取的结果 Controller 。

该错误消息似乎还表明您没有正确管理上下文。

关于ios - NSFetchedResultsController :objectAtIndexPath: causes NSInvalidArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32652065/

相关文章:

ios - 如何在位字段上执行插入操作?

ios - MagicalRecord:修改相关对象的属性

ios - Xcode 多线程违规“留给我们的就是荣誉 cocoa ”

python - Mercurial 由于 qct 扩展而崩溃 - 我尚未启用该扩展

iphone - 为什么我的应用程序在我更改框架时偶尔会崩溃?

objective-c - UIAlertView 具有用户提供的上下文和 [self autorelease]

ios - 在保存到 CoreData 之前检查数据是否为 ​​nil

iphone - StoreKit SKProducts请求崩溃

javascript - 自定义 Angular 滤镜使IE 9+崩溃

ios - 在 swift 2.3 中编写应用程序是否为时已晚?