Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 核心数据回滚是撤消另一个线程中先前非事务操作的更改_Ios_Multithreading_Core Data_Transactions_Rollback - Fatal编程技术网

Ios 核心数据回滚是撤消另一个线程中先前非事务操作的更改

Ios 核心数据回滚是撤消另一个线程中先前非事务操作的更改,ios,multithreading,core-data,transactions,rollback,Ios,Multithreading,Core Data,Transactions,Rollback,这是一个复杂的问题。 我们有一个IOS应用程序,有时在后台运行一个长时间运行的任务,更新数据库。使用创建单独管理的对象上下文并共享持久存储协调器 我们还添加了通知侦听器,并将更改通知传递给相关上下文processPendingChanges方法。(双向处理) 我们看到的是后台线程正在删除多个对象,而不是在一个事务中。后台线程完成并保存所有更改。然后,在前台执行一个回滚操作 这会导致某些已删除的对象重新出现。(executeFetchRequest找到它们。)这些对象无效,使用它们将使应用程序崩溃

这是一个复杂的问题。 我们有一个IOS应用程序,有时在后台运行一个长时间运行的任务,更新数据库。使用创建单独管理的对象上下文并共享持久存储协调器

我们还添加了通知侦听器,并将更改通知传递给相关上下文processPendingChanges方法。(双向处理)

我们看到的是后台线程正在删除多个对象,而不是在一个事务中。后台线程完成并保存所有更改。然后,在前台执行一个回滚操作

这会导致某些已删除的对象重新出现。(executeFetchRequest找到它们。)这些对象无效,使用它们将使应用程序崩溃

只有在前台上下文在后台线程删除这些对象之前的某个时间访问了这些对象时,才会发生这种情况。(即,它们在缓存中。)我已检查以确保后台的更改通知正在发送到前台上下文,并且正在前台线程上处理


我已经验证了对象在调用回滚之前不存在于前台上下文中,并且在回滚之后确实存在。(但并非完全有效。)当前台上下文接收到来自后台上下文的更改通知时,它似乎并没有从缓存中删除已删除的对象。

您能分享一个描述此问题的代码示例吗?为上下文设置了哪些合并策略?如何合并更改(保存或更改)?您正在处理合并中挂起的更改吗?如果合并的上下文发生了更改,您会保存它吗?涉及的代码很多,分散在一个很大的区域内。我看看能不能提取出相关的部分。。。