Core Data 多线程存储关系

2023-11-29

我的问题很奇怪,我正在寻求帮助。我想向您解释我的系统是如何工作的。我对此有两个问题。

我正在制作有两个表的应用程序。我正在使用核心数据。表格是类别 and Products,在核心数据中我建立了一对多的关系Category可以有多个Products, Product可以拥有一个Categroy.

这是基本架构

Category {
  site_id
  name
  allProducts ->> Product
}

Product {
  site_id
  name
  category -> Category
}
  • 这是简化模型产品,catwegories 有更多属性

在该应用程序中,我有更新过程,并且该过程在后台线程中工作。我已经为该线程创建了上下文,并且我在该上下文中存储了所有更改。

我在后台线程中执行的所有计算

[context performBlock:^{
  // all my operations for updating storing categories and products
}]

这是更新过程的流程

  1. 从服务器获取带有类别数据的 JSON
  2. 从服务器获取带有产品数据的 JSON
  3. 从服务器获取 JSON,其中包含哪个类别有哪些产品的信息array((category_site_id > array(product_site_id1, product_site_id2...))

  4. 传递类别 JSON 并存储类别实体,我从 JSON 获取 name 和 site_id 并创建实体并设置这些属性

  5. 传递产品 JSON 并创建产品实体并从 JSON 的属性设置 name 和 store_id

然后是主要部分

  1. 现在我需要根据步骤 3 中获得的 JSON 将产品连接到类别,这是一个问题。

我将从 JSON 获取每个类别并获取所有产品 site_id 作为 NSArray,我使用带有谓词和 IN 标准的获取请求来获取所有产品products上下文中具有 site_id IN 数组的实体。但我总是得到零结果。这很奇怪,因为我在后台线程的上下文中调用获取结果,并且我还在步骤 3 和 4 中更新了该上下文。

然后我尝试下一步,在步骤 6 之前[context save:&error]并添加了大约 30 秒的睡眠,当该程序运行到步骤 6 后,所有工作都非常有趣,我的获取结果得到了带有 IN 标准谓词的产品。这是我的第一个问题,如果你理解我的话,我无法通过 ID 获取产品,我需要等待大约 30 秒才能将上下文存储到 SQLLiteDB,这很奇怪。这也很奇怪,因为当我想通过 id 获取具有提取请求的类别时,我可以毫无问题地获取它(也许是因为步骤 5 大约需要一分钟)。

我的下一个问题是当我等待 30 秒然后通过槽类别时。基于类别 site_id,我从上下文中获取类别实体,并且在步骤 6 中,我根据 JSON 和获取请求获取的产品 site_ids 获取所有产品,现在我想将产品添加到类别,然后调用 next

[category setAllProducts:results] // results是product的NSSet,category是实体对象

NSError *错误= nil; [上下文保存:&错误];

我对每个类别都这样做(在步骤 3 中从服务器获取 JSON 格式)

完成所有操作后,我在 UI 上看不到类别中的产品,我还等待一段时间将所有数据存储在数据库中,但没有任何反应,

然后当我停止应用程序并再次运行它时,我可以看到类别中的产品:(

很奇怪的问题请帮帮我我不知道我哪里错了。我可以发布部分代码,代码并不小,我根据流程描述寻求帮助。

非常感谢


我的理解是您正在使用子上下文。儿童环境受到许多因素的影响(many!)你必须处理的错误。

关于这个主题的好文章在这里:

http://wbyoung.tumblr.com/post/27851725562/core-data-having-pains

我对此的建议是使用直接连接到存储协调器的上下文,而不是子上下文。使用这样的设置一切都会正常工作。当然,您可以使用私有队列上下文。

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

Core Data 多线程存储关系 的相关文章

  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 将 MPMoviePlayerController 的视图添加到 UIView

    我想添加MPMoviePlayerController to a UIView 首先 我在 xib 文件中放置了一个视图 名为 youTubeView youtube播放器是MPMoviePlayerController youtubePl
  • iOS 5 UIView drawRect 覆盖在设备上不起作用

    我正在准备在 iOS 5 GM 上发布我的 iPhone 应用程序 并遇到了 UIView 的错误 当我在子类上重写 drawRect 方法时 模拟器会显示所需的结果 但当我尝试在实际设备上测试时 drawRect 重写根本没有任何效果 我
  • Flutter-iOS 当应用程序更新/重新编译时存储的图像丢失

    嗨 请原谅我的英语 也是 flutter iOS 的新手 我在 iOS 上有一个关于 flutter 的应用程序 用户可以从他们的相机和图库中拍摄照片和视频 我正在使用 image picker 包 这没有问题 然后我将其保存在在其应用程序
  • 在 Pages 文稿中打开文本—Swift

    在我的 Swift 2 应用程序中 用户通过文本字段创建一串文本 然后将其共享给另一个应用程序 现在 我只能将文本共享为 txt 文件 这不提供选项Open In Pages当我打开系统共享对话框时 如何才能让用户可以选择将输入的文本作为
  • 如何将 .ipa 转换为 .app 文件?

    每个人 我有一些 ipa 文件 想要转换为包含 app 包的存档文件 我试图这样做 但我没有办法 有什么办法可以做到这一点吗 请帮我 将 ipa 重命名为 zip 然后提取即可
  • 如何从 Xcode 4.5 卸载 iOS 5.0 模拟器

    我已经安装了 Xcode 4 5 由于我编写应用程序是为了好玩 我不打算支持旧版 iOS 版本 并且为了节省 500 GB iMac 上的空间 是否有办法删除它 尝试从 Xcode 包中支持的平台中删除 iPhone iPhoneSimul
  • 如何本地化 iOS 故事板

    我有一个包含一些视图的 iPhone 故事板 例如 导航项标题名为News 应翻译为其他语言 当我向故事板添加新的本地化版本时 它会为新语言创建当前故事板的副本 在这里我可以更改导航项的标题 但对我来说它似乎不太有用 如果我的故事板包含 1
  • iOS FacebookSDK + 解析 SDK + GoogleMaps SDK

    我搜索了很多 然后我意识到 ObjC标记那个GoogleMapSDK需要 但不能很好地配合ParseSDK and FacebookSDK 所以我阅读了所有的 stackoverflow 答案并尝试解决我的问题 问题还没有解决 我执行的步骤
  • 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

    我正在从 Java 切换到 Objective c 但遇到了一些困难 我已经搜索过这个问题但没有取得太大成功 我有一个存储 NSMutableArrays 的 NSMutableArray 如何向数组添加数组 您可以在数组中存储对另一个数组
  • 单击按钮时退出应用程序 - iOS [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 4 0 中退出应用程序 https stackoverflow com questions 3097244 exit application in ios 4 0 我有一个 AlertView
  • 在辅助功能模式下未检测到手势

    我正在编写一个应用程序 我需要在屏幕顶部放置一个标签 每当用户触摸它 或在其上方滑动手指 时 我需要大声读出标签文本 我尝试了以下方法 首先制作标签的可访问性元素 YES labelInfo setIsAccessibilityElemen
  • UITableViewCell 内嵌套 UIStackView 内的 UILabel 有时会被截断

    我的一个表设置中有一个表视图单元格 其中包含以下视图层次结构 外部水平 stackview 固定到单元格内容视图的尾部 前部 底部和顶部边缘 右侧标签固定到其父 stackViewHackView 的尾部 前部 底部和顶部边缘 在我的控制器
  • 使用未声明的类型“对象”

    这太奇怪了 通常我可以理解未声明的类 但这是声称 Object 类本身未声明 NSObject 可以工作 但我的项目设置方式我需要它是一个纯 Swift 对象 我的类标题如下所示 import UIKit import Foundation
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • 获取Windows下新线程/删除线程的通知

    创建 DLL 时 您可以在 DllMain 函数 DLL THREAD ATTACH DLL THREAD DETACH 中获取有关新线程 退出线程的通知 有没有办法在 非托管 可执行文件中从 Windows 获取这些或等效通知 是的 在您
  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空
  • 如何安全地重命名 iOS 分发配置文件?

    我几个小时前刚刚提交了我的第一个应用程序 现在处于 等待审核 状态 但我犯了一个错误 我已经命名了我的分配配置文件My Company Distribution Profile 我应该做的事情被命名为我的发行版配置文件My GAME Dis
  • TestFlight 安装的应用程序因 Swift 包管理器依赖项而崩溃

    我们已经迁移了一些 CocoaPod 依赖项 以便在 Xcode 11 中使用 Swift Package Manager 进行构建和链接 但是 每当我们将应用程序提交到 AppStore Connect 并使用 TestFlight 进行

随机推荐

  • PHP从页面中提取文章摘录

    任何人都知道如何从任何给定的文章页面生成摘录 因此可以从许多类型的网站获取资源 就像当你将网址粘贴到帖子中时 Facebook 所做的那样 谢谢 你想做的事情叫做网页抓取 这样做的基本方法是捕获页面 您可以使用以下命令抓取 URLfile
  • 使用 URL.createObjectURL 重建 PDF 后损坏

    我试图从服务器传递 PDF 文件并将其显示在浏览器中 但输出已损坏 var blob atob data Package console log blob var file new Blob blob type application pd
  • 如何在 Android 中显示来自 google 驱动器 url 的视频

    我想在 Android 应用程序中显示视频 我在谷歌上搜索并找到了下面的代码 VideoView videoView VideoView findViewById R id videoView 字符串 vid 地址 https docs g
  • bash 脚本中的“exec”之后不会运行任何代码[重复]

    这个问题在这里已经有答案了 我在命令名称中使用变量扩展进行测试的示例 bash 脚本 test command w variable expansion in name sh bin bash Gabriel Staples 21 Mar
  • 必须声明标量变量错误

    这与我最后一个问题有关 我有这个代码 DECLARE PatientId UNIQUEIDENTIFIER DECLARE FormId NCHAR 16 DECLARE columns VARCHAR 8000 DECLARE query
  • 将 JFileChooser 置于所有窗口之上

    我似乎对文件选择器对话框的非常简单的实现有一个问题 它要求我每次都最小化 Netbeans 才能实现它 而且现在特别是在测试时变得非常令人沮丧 我在网上看到了一些解决方案 包括SO但似乎没有一个能做到这一点 而其他一些对于我目前的水平来说似
  • 在 swing 中调整图像大小

    我有一段代码 用于将图像大小调整为窗帘大小 我想将分辨率更改为 200 dpi 之类的值 基本上我需要它的原因是因为我想显示用户选择的图像 有点大 然后如果用户批准我想在不同的地方显示相同的图像但使用较小的分辨率 不幸的是 如果我给它一个大
  • 如何在 html 中嵌入 .AVI?

    我在网上找到了一些 html 中的 AVI 示例 但我的页面http pianocheater com VIDEO html是有问题的 我的电脑上的 chrome 没问题 在 IE 中 您会在顶部看到那个该死的栏 然后视频就变成空白了 它可
  • 在 Python 中进行多处理时无法使用输入

    我想同时运行2个进程 1 将继续每秒打印 a 另一个进程将要求输入 当输入为 Y 时 第一个进程将停止打印 a 我对 Python 还很陌生 我不明白 这是我到目前为止想到的 from multiprocessing import Proc
  • 谁能告诉我 pragma 语句的用法

    谁能告诉我 C 和 Ada 中 pragma 的使用 如果可能的话请提供一些例子 C99 中有 3 个标准编译指示 pragma STDC FP CONTRACT on off switch pragma STDC FENV ACCESS
  • 几何平均值:有内置的吗?

    我试图找到一个内置的几何平均值 但找不到 显然 内置函数不会在 shell 中工作时为我节省任何时间 我也不怀疑准确性有任何差异 对于脚本 我尝试尽可能频繁地使用内置函数 其中 累积 性能提升通常是显而易见的 万一没有 我怀疑是这样 这是我
  • 如何在 Python 中将一个内存 SQLite 数据库复制到另一个内存 SQLite 数据库?

    我正在为 Django 编写一个测试套件 它以树状方式运行测试 例如 测试用例 A 可能有 2 个结果 测试用例 B 可能有 1 个结果 测试用例 C 可能有 3 个结果 树看起来像这样 X A B C X B X X C X X 对于上面
  • 要求在 Prestashop 模块上的一个文件中自动加载的方法?

    我正在尝试将一组库与 Composer 一起用于 Prestashop 模块 我目前的方法是包括vendor autoload php每个文件上的文件 mymodule php controllers front foo php contr
  • 为什么我们需要使用 boost::asio::io_service::work ?

    有一个使用 boost asio 的示例 为什么这个例子使用 boost asio io service work 为什么是srv run 没有调用线程来执行任务 int main boost asio io service srv boo
  • 尝试使用 C# 中的 ODbc 从 MSysObjects 读取数据,但出现无权限错误

    如标题所述 我试图从 Access 2010 数据库中的 MSysObjects 读取数据 但出现异常 告诉我不允许从该表中读取数据 我可以读出其他非 MSys 表 SQL Query I am using SELECT FROM MSys
  • 如果视图具有特定类(backbone.js),则点击时触发函数

    我有一个div由backbone js视图生成 当用户点击这个div 一类active被添加到div和函数addToSet被执行 Problem 我希望在视图的时候触发另一个函数div有课active 但是 我的尝试如下所示总是导致addT
  • 返回从 A1 到最后使用的真正单元格的范围

    我想选择电子表格中的所有行和列 宏需要是动态的 因为每次调用宏时列数和行数往往会发生变化 它还需要能够考虑空白行和列 该子程序完成部分过程 Sub FindLastCell Cells Find What After A1 SearchDi
  • 在 C# 中从 XML 填充下拉列表

    我有以下 xml 格式 并且我正在使用 NET 2 0
  • Neo4j:在树状图中显示所有连接的节点及其父节点

    我的 neo4j 数据库中有以下布局 a b c d e f g h i j 我想做的是查询所有子节点 例如如果起始节点是b 那么孩子们是e f h 所有节点都具有相同的标签 名称 和相同的关系类型 我可以通过以下方式完成此任务 MATCH
  • Core Data 多线程存储关系

    我的问题很奇怪 我正在寻求帮助 我想向您解释我的系统是如何工作的 我对此有两个问题 我正在制作有两个表的应用程序 我正在使用核心数据 表格是类别 and Products 在核心数据中我建立了一对多的关系Category可以有多个Produ