同时使用 CoreData、多线程和绑定

Posted

技术标签:

【中文标题】同时使用 CoreData、多线程和绑定【英文标题】:CoreData, Multi Threading and Bindings at the same time 【发布时间】:2011-09-05 10:36:25 【问题描述】:

我创建了一个小型测试应用程序。它创建了一家新公司和若干 x 员工。

员工是在他们自己的线程中创建的,一旦完成,他们就会被添加到公司中。

因为不允许线程之间共享托管对象,所以我使用公司的对象id。

为了不同时读/写同一个托管对象上下文,我为每个线程创建了一个临时上下文。我使用 - (void)mergeChanges:(NSNotification *)Notifikation 并合并 man 上下文和线程上下文之间的更改。

我使用两个应用控制器和绑定在两个表格视图中显示公司及其员工。

但仍有一个我无法修复的错误。每次我创建一个有员工的新公司时,并不是所有员工都出现在表格视图中。不知怎的,他们迷路了,但我不知道在哪里。

我已经在这里上传了 Xcode 项目:http://uploading.com/files/7894m9mc/CoreDataMultiThreading.zip/

我现在正在努力寻找一个星期的错误:(也许其他人有更多的运气。

注意:我想用该应用程序尝试在他们自己的线程(员工)中创建许多对象,并在创建后立即将这些对象添加到同一个对象(公司)中。

(请原谅我发音不好)

【问题讨论】:

您提供的 url 中的 zip 文件已损坏,无法解压。 没关系,文件托管服务很奇怪,让你等待。 【参考方案1】:

出现问题是因为许多Employee 对象在与前台线程合并后将其company 关系设置为nil。由于它们没有 company 关系对象,因此它们不会出现在 UI 中。

我不确定为什么合并会将关系设置为零。它可能与同时发生多个合并或尝试合并无故障的故障对象有关。

【讨论】:

以上是关于同时使用 CoreData、多线程和绑定的主要内容,如果未能解决你的问题,请参考以下文章

CoreData多线程安全

CoreData 多线程

CoreData 多线程死锁

CoreData和SQLite多线程访问时的线程安全问题

CoreData 多线程删除

在多线程上下文中,在托管对象上设置属性时,CoreData 阻塞