- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,我有一个非常棘手的问题,我花了几天时间来理解它,并且知道我不知道如何解决它。
我有一个从具有不同上下文的不同线程更新的 CoreData 数据库。我的问题是,有时 NSManagedObjectContextDidSaveNotification 事件重叠并导致基础损坏,从而导致崩溃。这是一个例子:
Thread Main NSFetchResultsController
Update database
Save database NSManagedObjectContextDidSaveNotification1
merge delegate process 1
process 1 done
Update database
Save database NSManagedObjectContextDidSaveNotification2
merge delegate process 2
process 2 done
Update database
Save database NSManagedObjectContextDidSaveNotification3
merge delegate process 3
Update database
Save database NSManagedObjectContextDidSaveNotification4
merge
process 3 done
delegate process 4
CRASH
process 4 done
在此伪代码示例中,process1 和 process2 可以正常工作但有时主线程会收到重叠的更新事件在 process3 完成之前,process4 开始读取数据库。
有官方的方法来处理这个问题吗? CoreData 是否提供解决方案对于这种情况还是我必须使用 NSLock ?
谢谢
最佳答案
上下文应该锁定它们共享的持久存储协调器,以防止这些问题。
如果进程3和进程4都在主线程上运行,那么进程4怎么会在进程3完成之前启动呢?不要忘记,通知是在发布通知的线程上收到的,因此您需要显式执行代码以合并主线程上的更改(如果我说的是显而易见的话,请道歉)。
关于iphone - 防止 NSManagedObjectContextDidSaveNotification 事件重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4872965/
我在背景上下文中使用 Core Data 有一段时间了,想知道为什么每个人都建议使用 NSManagedObjectContextDidSaveNotification 从后台合并到主上下文。我创建了
您好,我有一个 FriendsViewController,我在其中显示从 coreData 获取的 friend 记录。我有另一个 View Controller AddFriendViewCont
我的应用程序中有 2 个独立的数据存储,它们同时进入后台线程。因此,我有以下代码来设置它: NSNotificationCenter *notificationCenter = [NSNotifica
好吧,我有一个非常棘手的问题,我花了几天时间来理解它,并且知道我不知道如何解决它。 我有一个从具有不同上下文的不同线程更新的 CoreData 数据库。我的问题是,有时 NSManagedObject
我想知道是否有可能以某种方式从 NSManagedObjectContextDidSaveNotification 中查看保存的 NSManagedObject 类? 我试过这样的: [[notifi
我有一个有趣的问题,我似乎无法找到解决方案 - 我有两个托管对象上下文,'main' 和 'backing'。 'Main' 使用 NSMainQueueConcurrencyType 创建,'bac
我有一个 NSFetchedResultsController,它使用谓词获取对象: isTrash == NO 大多数情况下这会按预期工作,但是当对象未被回收时,获取的结果 Controller 不
我遇到了一种情况,我在主线程中对 NSManagedObject 的属性进行了一些更改。它属于应用程序的主 ManagedObjectContext。 我的应用程序确实启用了下载数据的线程,每个线程都
我遇到了 NSManagedObject 的问题,它没有反射(reflect)在后台线程保存其上下文后对持久存储所做的更改。 设置 在一个简单的测试应用程序中,我有一个单独的窗口,其中列出了我的核心数
我是一名优秀的程序员,十分优秀!