kra*_*itz 4 iphone core-data objective-c ios4
我试图将数据保存到后台线程中的核心数据,因为它需要相当长的时间来保存.
我做了:
[self performSelectorInBackGround:@selector(insertRecord:) withObject:data];
Run Code Online (Sandbox Code Playgroud)
当一切正常时,直到insertRecord方法中的行命中contextsave:&error.节目收到的信号:"SIGABRT"
我做错了吗?它在主线程中工作正常,我只是将代码移动到另一个方法并在后台运行它,它不再起作用了.
建议使用Core Data进行并发编程的模式是线程限制:每个线程必须拥有自己的完全私有的托管对象上下文.
和
使用线程限制,不应在线程之间传递托管对象或托管对象上下文.
看起来您正在将托管对象传递给后台线程,这是禁止的.我不知道您是否也尝试在线程之间共享托管对象上下文.
该文档描述了将托管对象传递给其他线程的几种解决方法.你需要实现其中一个.
这里的问题是托管对象上下文不是线程安全的.如果您的-insertRecord:方法使用主线程的托管对象上下文,那么您就会遇到麻烦.
博客可可是我的女朋友有一篇文章,核心数据和线程,没有关于这个主题的头痛,并建议一些在后台保存的策略.基本思想是对属于后台线程的上下文进行更改,然后将更改合并到主线程的上下文中.这为您提供了一个最新的上下文,您可以在后台保存,同时仍然保持主线程的上下文最新.
| 归档时间: |
|
| 查看次数: |
1804 次 |
| 最近记录: |