【发布时间】:2011-04-13 15:13:50
【问题描述】:
我有一个核心数据应用程序,它具有文章和评论的数据结构(一对多关系)。
NSOperations 在不同的线程上管理下载和 JSON 解析,然后它使用 mergeChangesFromContextDidSaveNotification 将更改传递到保存它的主线程,并且 fetchedResultsController 负责 tableView 更改。
对文章和 cmets 的调用在从服务器调用的单独 API 中,每个 API 都有自己的 NSOperation 来处理导入。 (它们大致基于 Apple 的 RSSImporter 类,但已针对 JSON 进行了修改)。每个操作都有自己的上下文并使用 fetchedResultsController 中的 storeCoordinator。
commentParser.articleObjectID = [article objectID];
commentParser.persistentStoreCoordinator = [[self.fetchedResultsController managedObjectContext] persistentStoreCoordinator];
我正在尝试在文章和 cmets 之间的 NSOperation 中设置关系,我相信我通过将文章的 objectID 传递给 cmets 操作,然后通过执行以下操作使用对象来遵循最佳实践:
Article *article = (Article *)[self.insertionContext objectWithID:articleObjectID];
Comment *aComment = (Comment *)[NSEntityDescription insertNewObjectForEntityForName:@"Comment" inManagedObjectContext:self.insertionContext];
[aComment setCommentArticle:article];
这似乎工作正常,但是当返回原始文章的 tableView 所在的根 viewController 时,我收到以下错误消息:
* 由于未捕获的异常而终止应用程序 'NSObjectInaccessibleException', 原因:'NSManagedObject 与 ID:0xdb24f30 已失效。'
对此的任何帮助将不胜感激!
【问题讨论】:
标签: objective-c multithreading core-data concurrency nsoperation