具有线程的多上下文 CoreData

2023-12-11


UPDATE :我想问题是保存子上下文时父上下文没有更新。仍然需要帮助。


我尝试过很多多上下文(父子)核心数据的例子。

以前我的应用程序使用传统的数据存储方式,即我使用了一个OperationQueue,我从服务器获取数据并使用MOC保存到数据库,并在保存时向mainMOC发出通知以mergeChanges:NSManagedObjectContextDidSaveNotification。

在不干扰应用程序流程的情况下(即删除操作队列),我尝试实现父子 ManagedObjectContext 关系,其中我使用了带有 concurrencyType 的 privateMOC 作为NSPrivateQueueConcurrencyType它有一个 persistantStoreCoordinator,并且 mainMOC 的 concurrenyType 为NSMainQueueConcurrencyType它是 privateMOC 的子级。在队列中我有一个 tempMOC,其 concurrencyType 为NSPrivateQueueConcurrencyType它是 mainMOC 的子级。

在保存时,我嵌套了performBlock三个 MOC 中的:

[tempMOC performBlock:^{
        if (![tempMOC save:&error]) {
            NSLog(@"Error : %@",error);
        }
        [mainMOC performBlock:^{
            if (![mainMOC save:&error]) {
                NSLog(@"Error : %@",error);
            }
            [privateMOC performBlock:^{
                if (![privateMOC save:&error]) {
                    NSLog(@"Error : %@",error);
                }
            }];
        }];
    }];

当 mainMOC 尝试保存时,我收到类似 CoreData 1560 和 1570 的错误。NSValidationErrorKey错误指出某个值是nil。 tempMOC 的更改是否不会传递到 mainMOC ?我没有深入研究,但据我所知,它不应该是零。 可能是什么错误?请帮忙。

UPDATE :我尝试打印 tempMOC 的对象,我看到正确的值,例如:

<Element_Name: 0xc0b59c0> (entity: Element_Name; id: 0xc07ca90 <x-coredata:///Element_Name/t2DCD57A8-4C1A-4AF7-A10E-5B9603E2BB8730> ; data: {
    tag1 = nil;
    tag2 = 3430065;
    tag3 = 600;
    tag4 = N;
    tag5 = "2013-10-29 00:00:00 +0000";
    tag6 = nil;
    tag7 = 327842701;
    relation = "0xbf1f760 <x-coredata://87C54A94-701E-4108-826E-4D98A53380F9/Relation/p1>";
    tag8 = "Some_Value";

我尝试打印 mainMOC 的对象,我看到nil值而不是数据,例如:

<Element_Name: 0xbd47a50> (entity: Element_name; id: 0xc0b14b0 <x-coredata:///Element_Name/t2DCD57A8-4C1A-4AF7-A10E-5B9603E2BB8740> ; data: {
    tag1 = nil;
    tag2 = nil;
    tag3 = 0;
    tag4 = nil;
    tag5 = nil;
    tag6 = nil;
    tag7 = nil;
    relation = "0xbd586c0 <x-coredata://87C54A94-701E-4108-826E-4D98A53380F9/relation/p1>";
    tag8 = nil;

我刚刚遇到了同样的问题并找到了解决方案。如果没有您的其余代码,我不能保证这会解决您的问题,但它确实解决了我的问题。

我正在实例化一些 NSManagedObject 类,修改它们的一些属性,然后将它们插入到 temp 或 child 中NSManagedObjectContext。所有属性都显示得很好,就像您的情况一样。

但是当我保存该上下文并且更改被推送到父级时NSManagedObjectContext,所有属性均无效(就像您的情况一样)。

仅使用一个时我没有观察到这种行为NSManagedObjectContext,而且我还没有尝试过旧的NSManagedObjectContextDidSaveNotification图案。

解决方案当然是添加NSManagedObject初始化之后、任何属性分配完成之前的上下文。

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

具有线程的多上下文 CoreData 的相关文章

随机推荐

  • 如果没有明确设置一个巨大的常量值,是否可以期望被告知不要超时?

    我已将超时设置为一个愚蠢的高数字 有没有更好的方法告诉脚本不要超时 usr bin expect spawn telnet 10 10 10 10 set timeout 200000000 expect login send user r
  • iOS 15 中 UIButton 图像行为发生变化?

    我的代码很简单 我有一个 UIButton 的出口 button 我在代码中设置它的图像 let jack UIImage named jack png self button setImage jack for normal 问题是这并不
  • Cython C++ 包装器运算符() 重载错误

    与我之前的问题有关 使用 Cython 包装使用 OpenCV 类型作为参数的 C 类 现在我陷入了另一个错误 我的 OpenCV 类型 Matx33d 的 cython 包装代码如下所示 cdef extern from opencv2
  • Eclipse:运行时我们如何获取 main 参数

    在 Java 中 对于普通的 main 方法 public static void main String args code here String args用于从命令行获取一些参数 我可以通过以下方式从命令提示符运行此文件 javac
  • 为什么修改迭代变量不影响后续迭代?

    这是我遇到问题的 Python 代码 for i in range 0 10 if i 5 i 3 print i 我预计输出是 0 1 2 3 4 8 9 然而 翻译却吐槽道 0 1 2 3 4 8 6 7 8 9 我知道一个for循环在
  • 在 matlab 等高线图中选择特定水平

    我有这个plot我生成它是为了测试等值线图在 matlab 上的工作原理 我想弄清楚是否有一种方法可以只绘制其中一条线 但不一定是第一条线 Matlab 的解释是 如果你这样做 contour X Y Z 1 它会绘制其中一条线 但它始终是
  • Oracle SQL 对版本号进行排序

    在 Oracle 中 只需使用ORDER BY不对版本号进行排序 我的Version Number字段被声明为VARCHAR我无法改变它 例如 以下版本 1 20 1 9 1 18 1 13 1 5 1 11 2 0 1 8 1 3 1 2
  • 使用SFTP / RCurl创建远程目录

    是否可以使用 RCurl 包在 SFTP 站点上创建目录 我找到了sftp create dirs函数 但我找不到如何使用它的示例 我尝试设置ftp create missing dirs选项TRUE as in library RCurl
  • JavaScript 提升函数与函数变量

    这是我的 JavaScript 代码 console log a c b var a Hello World var b function console log B is called function c console log C i
  • AttributeError:构建逻辑回归模型时“str”对象没有属性“decode”[重复]

    这个问题在这里已经有答案了 我正在尝试建立一个逻辑回归模型 但它显示了AttributeError str object has no attribute decode 请帮我解决这个问题 该代码在 Datacamp 的服务器上完美运行 但
  • ValueError:解析日期时时间数据与格式不匹配

    当我尝试将字符串解析为日期时间时 我这样做 之前已导入日期时间 fecha 2 datetime strptime 22 01 2019 17 00 d m y H M 但是 我收到此错误 ValueError 时间数据 22 01 201
  • PHP 方法链接的好处?

    仍在 PHP OOP 训练轮上 这个问题可能属于失败博客网站 PHP 中的方法链有什么好处 我不确定这是否重要 但我将静态调用我的方法 例如 foo Bar get sysop gt set admin gt render 根据我的阅读 任
  • 从 GradientBoostingClassifier 中提取决策规则

    我已经解决了以下问题 如何提取梯度提升分类器的决策规则 如何从 scikit learn 决策树中提取决策规则 然而以上两个并没有解决我的目的 以下是我的查询 我需要使用gradientboostingclassifer在Python中构建
  • 为什么在输入n之前声明数组的大小为n,第一次有效,但第二次就不行了?

    我正在解决一个问题 在输入 n 的值之前 我将数组的大小声明为 n 它适用于第一个测试用例 但不适用于第二个测试用例 为什么 P S 我在网上找不到任何相关信息 这是代码片段 int n arr n cin gt gt n int n ar
  • 快速从 findObjectsInBackgroundWithBlock 获取数据

    我正在使用 Parse 从数据库中获取数据 当块 findObjectsInBackgroundWithBlock 被调用时 会传递一个数组 由于我只接收一行数据 因此它全部出现在数组的一个 0 部分中 那么我如何从该数组中获取所有位 这是
  • 正确的表格标题

    语义问题 如果我有一个基本上是一张大表的 HTML 页面 我应该使用什么元素作为标题 通常 您会使用h1用于页面标题 以及caption作为表格的标题 但是 如果表格是页面上唯一的内容怎么办 包括两者看起来有点傻 那我用一个h1并忘记cap
  • 未找到配置或 get/set 在 Angular 6 中已被弃用

    ng config global defaults styleExt scss 错误 找不到配置 ng set global defaults styleExt scss 错误 get set 已被弃用 取而代之的是 config 命令 已
  • PyQT5错误:无法找到或加载Qt平台插件xcb

    直到 为止Anaconda3 其中包含Python 3 4 已重新安装在我的RedHat 6 5工作站 我已经能够开发使用的Python应用程序PyQT5 重新安装后Anaconda我收到一条错误消息 无法找到或加载 Qt 平台插件 xcb
  • React 虚拟化下拉菜单被溢出剪切:隐藏

    我正在为我的表使用react virtualized 我想在单击单元格中的按钮时显示一个下拉菜单 问题是我的下拉菜单被表格的行高抑制 行高 40 行高度 200 我玩过css定位 但到目前为止没有任何效果 下拉菜单代码 div div
  • 具有线程的多上下文 CoreData

    UPDATE 我想问题是保存子上下文时父上下文没有更新 仍然需要帮助 我尝试过很多多上下文 父子 核心数据的例子 以前我的应用程序使用传统的数据存储方式 即我使用了一个OperationQueue 我从服务器获取数据并使用MOC保存到数据库