iOS 7 上的合并冲突

2024-01-19

我已经更新了我的应用程序以支持 iOS 7,并且遇到了以下问题:在我的某个屏幕上[context save];我收到以下错误:

NSCocoaErrorDomain Code=133020 "The operation couldn’t be completed. (Cocoa error 133020.)" UserInfo=0x1115a6d0 {conflictList=(
"NSMergeConflict (0x1115a670) for NSManagedObject (0xf25c850) with objectID '0xf25c070 <x-coredata://76AF57C8-F7FF-4880-B06B-63F8B780C96D/Screen/p7>' with oldVersion = 5 and newVersion = 6 
and old object snapshot = {\n    index = 3;\n    message = \"<null>\";\n    status = 0;\n} and new cached row = {\n    index = 3;\n    message = \"<null>\";\n    status = 0;\n}"

在iOS6上不会出现这个问题。

更新: ManagedObjectContext 的代码

-(NSManagedObjectContext *)managedObjectContextForCurrentThread{
if ([NSThread isMainThread])
{
    NSManagedObjectContext *parentContext = self.mainManagedObjectContext.parentContext;
    [parentContext performBlockAndWait:^{
        NSMergePolicy *mergePolicy = [[NSMergePolicy alloc] initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType];
        [[self mainManagedObjectContext] setMergePolicy:mergePolicy];
    }];
    return self.mainManagedObjectContext;
}
else
{
    NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];
    NSManagedObjectContext *threadContext = [threadDict objectForKey:kCGMManagedObjectContextKey];
    if (threadContext == nil)
    {
        threadContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
        NSManagedObjectContext *parentContext = self.mainManagedObjectContext.parentContext;
        [parentContext performBlockAndWait:^{
            NSMergePolicy *mergePolicy = [[NSMergePolicy alloc] initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType];
            [parentContext setMergePolicy:mergePolicy];
        }];
        [threadContext setParentContext:self.mainManagedObjectContext];
        [threadDict setObject:threadContext forKey:kCGMManagedObjectContextKey];
    }
    return threadContext;
}

}


我刚刚花了两天调试完全相同的错误。你的应用程序和我的应用程序之间的区别在于,我的应用程序仅从主线程访问核心数据,因此合并错误更加令人费解。

在我们的例子中,我将范围缩小到我们有一个单向关系的事实 - A 有许多 B(建模为 NSSet),但 B 不知道它的 A。我们有一个方法可以同时修改 A 和 B,当我们保存这些更改时会导致合并错误。这段代码在 iOS 5 和 6 上长时间运行良好,但在 iOS 7 上才开始失败。

确实,添加合并策略将使错误消失,但它也可能掩盖其他错误。在我们的例子中,我们宁愿看到这些错误,也不愿冒数据库不一致的风险。

将关系更改为双向使错误消失。反向链接对于我们的应用程序来说不是必需的,但它们也没有什么坏处。 (令人高兴的是,更改这种关系作为轻量级迁移得到了正确处理 - 核心数据自动为我们填充了这些反向链接。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 7 上的合并冲突 的相关文章

随机推荐

  • 通过 Android 与串行 USB 设备通信

    我有一台用于测量电流的定制设备 该设备可以连接到 PC 并通过 USB 进行通信 它基于FTDI芯片 我有用 Java 编写的应用程序 该应用程序使用 rxtxSerial dll 库和 gnu io rxtx 2 1 7 4 jar 现在
  • 使用opencv GPU旋转图像

    我在用着GPU 旋转 https docs opencv org 2 4 modules gpu doc image processing html gpu rotate从 opencv lib 顺时针旋转图像 include
  • 基于std::vector的N维张量

    我想使用 std vector 定义 n 维数据结构 我对operator 的定义有疑问 让我们看一下二维结构示例 class my data public my data size t N size t M tab N M N N M M
  • 如何从 HTML 字符串获取 beautiful soup 中的开始和结束标签?

    我正在使用 beautiful soup 编写一个 python 脚本 其中我必须从包含一些 HTML 代码的字符串中获取开始标记 这是我的字符串 string p p 我想要得到 p 在一个名为opening tag and p 在一个名
  • 有没有办法在每次启动 cmd 时运行 vcvars32.bat?

    我在用着cl in cmd并且不得不跑vcvars32 bat每次我打开一个cmdwindow 确实是一个痛苦的 axx 谁能提供一种自动运行它的方法 From cmd 如果在命令行上未指定 D 则当 CMD EXE 启动时 它 查找以下
  • DDD“查看对象”?

    假设一个应用程序涉及公司 我可能有一个公司类 我将有一个填充列表 的数据访问层 但是 有时 例如显示搜索结果 我只需要显示公司名称 电话和邮政编码属性 并且在我看来 用其所有属性填充整个公司对象似乎很浪费 就 DDD 设计而言 解决此问题的
  • Redmine错误日志致命:不是git存储库

    我在git服务器 gitlab 上安装了redmine 这是我们的主要git服务器 同一台机器 当我在redmine web中添加存储库 通过gitlab 信息时 redmine日志说 usr local redmine log devel
  • 如何限制 macOS 窗口管理恢复特定窗口?

    我有一个应用程序 它有几个窗口定义为窗口组 其结构符合主场景中的应用程序 WindowGroup StandingsView StandingsView environmentObject appServices handlesExtern
  • 如何为 flutter 应用程序添加 Android 通知通道 ID 以修复应用程序在后台运行时的通知

    在我的 flutter 应用程序中 onResume 和 onLunch 函数在 Android 平台上不起作用 但它们在 IOS 上运行良好 我在控制台上收到以下消息 而不是这些函数中的打印字符串 W FirebaseMessaging
  • 使用任意方法(插件、GreaseMonkey?)在 Chrome 或 Firefox 中使用 JavaScript 移动鼠标光标

    我需要在浏览器中移动鼠标光标位置 我可以使用任何方法 只要它在 Google Chrome 或 Firefox 中 其中之一即可 在最好的情况下 我想用javascript控制鼠标位置 有什么简单的方法可以做到这一点吗 谢谢 菲尔 我认为这
  • Unity 2017.3.0f3发布数据未发送到LAMP服务器

    看起来我的 cpanel WHM 服务器有probably 虽然我不确定原因是什么 已经设置了一些安全设置 其中 PHP 没有接收从其他域 计算机 设备发布的表单数据 我已经测试了 null REQUEST 以及 POST 以防万一 转储的
  • 当某些任务可以为空时如何处理 WhenAll?

    我想等待所有任务 但其中一些可以为空 它是这样的代码 Task
  • 允许从文本区域输入提交 HTML?

    我如何允许从文本区域提交 HTML 我对此非常绝望 我找到的每个答案都给了我很差的信息 因为我不知道该怎么做 我有这个文本区域
  • 如何限制用户 SSH 访问某些文件夹

    目前 我们正在进行的项目有一名自由前端开发人员参与 由于我们以前从未使用过他 因此我们正在寻找一种方法来限制他对我们的服务器和文件的访问 但同时让他修改这些服务器上当前的视图文件 当前项目 全部在一台服务器上 被划分为 6 个独立的迷你站点
  • VS2010:自动生成的 XML 文档文件不更新

    我在vs2010中有一个C 项目 生成一个XML文档文件 我已将生成文件的输出路径设置为项目输出路径 我的问题是 当文档文件的路径与项目输出路径相同并且文件名相同 文件扩展名除外 时 文件不会更新 Does not更新 XML 文件 C M
  • 使两个脚本进行通信

    我必须使两个程序 例如 脚本 A py 和 脚本 B exe 进行通信 两个程序都处于无限循环中 脚本 A 需要写入脚本 B 的 stdin 然后读取脚本 B 的 stdout 然后再次写入 等等 脚本 B 我无法更改 这两个文件都在我的硬
  • 减少 C++ 代码大小

    我正在研究一种用于微控制器的动态语言 编译为 C 作为一名 CS 人员 我决定首先正确地完成它 然后再担心优化 以下是我的对象系统的结构 Base Interface Number Interface Int Float Char Sequ
  • Android:方向更改会擦除对我的 ImageView 所做的修改

    我有一个应用程序 其中有 ImageView 我打开新的活动 用手指画一些东西 这个位图返回到我的 ImageView 一切都很好 但是当我现在改变方向时 我的 ImageView 活动会重新绘制或重新启动 并且 imageview 为空
  • 是否可以在 WPF ScrollViewer 上调整鼠标滚轮滚动距离?

    我发现使用鼠标滚轮时滚动太多 我有一个很短的ScrollViewer 一行高 包含几行项目WrapPanel 并且它会在一个 刻度 内向右滚动到底部 以便中间的线永远不可见 这不是一个很好的解决方案 但您可以添加一些带有文本的窗格 每行一个
  • iOS 7 上的合并冲突

    我已经更新了我的应用程序以支持 iOS 7 并且遇到了以下问题 在我的某个屏幕上 context save 我收到以下错误 NSCocoaErrorDomain Code 133020 The operation couldn t be c