撤消在主线程之外执行的核心数据插入

2024-01-09

我正在编写一些使用NSOperation导入数据。我希望用户能够撤消NSManagedObject在导入操作期间创建的实例。

据我所知,不可能使用NSManagedObjectContext -undoManager对于在主线程之外执行的任何操作。来自核心数据编程指南部分关于使用线程限制来支持并发,我们有这两个条件:

  1. 仅应传递 objectID 托管对象上下文之间(在 单独的线程)
  2. 管理对象 必须先保存在上下文中 可以使用objectID。

这是有道理的,因为管理对象需要从私有存储中移动(NSManagedObjectContext)到公共存储(NSPersistentStore),然后才能共享。

不幸的是,-save:消息还会导致撤消堆栈中的任何托管对象被删除。来自使用核心数据的内存管理同一指南的部分:

已挂起的托管对象 更改(插入、删除或 更新)由其上下文保留 直到他们的上下文被发送保存:, 重置、回滚或解除分配消息, 或适当的撤消次数 撤消更改。

我已经尝试了几种方法来解决这个限制,并且一切最终都会导致主线程上发生的大量工作(以及旋转的沙滩球)。任何与主线程创建的对象进行撤消工作的线索都将是非常重要的非常感激。

--

增强型雷达已提交:rdar://问题/8977725 http://www.openradar.me/8977725


这个答案可能会有点来回。如果我正确理解问题,您正在执行导入,但是导入完成后您希望用户能够选择从导入中保存的内容?

如果这是不正确的,请修正我的假设,我将更新这个答案。

如果它是正确的那么你可以做的是:

  1. 将背景对象创建更改为

    NSEntityDescription *myEntity = ... //Entity from your context
    [[NSManagedObject alloc] initWithEntity:myEntity
             insertIntoManagedObjectContext:nil];
    
  2. 将这些实体存储在数组中。
  3. 根据需要将实体传递回主线程。
  4. 释放您不想保留的任何对象
  5. Call [myMainContext insertObject:managedObject]任何您想保留的内容。
  6. 执行保存NSManagedObjectContext.

由于这些实体不属于NSManagedObjectContext但它们只存在于记忆中should是线程安全的,因为它们还没有绑定到NSManagedObjectContext.

这当然是理论上的,需要测试。然而它应该实现你的目标。

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

撤消在主线程之外执行的核心数据插入 的相关文章

  • “无法取消归档名为 UITableViewController 的元素”

    我一直在按照 构建你的第二个 iOS 应用程序 教程一步步进行 在教程承诺所有错误都会消失之后 我遇到了这个错误 但直到其他错误都出现后 该错误才出现 全部更正 我尝试编译它 错误 The document MainStoryboard i
  • 使用标识符启动 iPhone 应用程序

    我正在尝试在我的应用程序中启动应用程序 例如 如果我按下 testApp1 中的按钮 它应该打开 testApp2 有没有办法用应用程序标识符来做到这一点 我听说过一种名为的未记录方法launchApplicationWithIdentif
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • 使用 NSTokenField 强制 NSPopover 不成为第一响应者

    我有一个 NSTokenField 并且在弹出窗口内提供自定义自动完成功能 不幸的是 一旦显示弹出窗口 它就会强制 NSTokenField 放弃第一响应者 有没有办法显示弹出窗口但不丢失 NSTokenField 上的第一个响应者 重写
  • Objective-C 头解析

    我需要解析一些 Objective C 标头 我尝试过使用Doxygen并解析 XML 输出 但它不完全支持没有注释的 Objective C 标头 它会阻塞属性中定义的宏 请检查Doxygen 无法正确识别属性 https stackov
  • iOS通过AVAssetWriter反转音频

    我正在尝试使用 AVAsset 和 AVAssetWriter 在 iOS 中反转音频 以下代码可以正常工作 但输出文件比输入文件短 例如 输入文件的持续时间为 1 59 但输出文件的持续时间为 1 50 且音频内容相同 void reve
  • 自动布局+基于总行数的动态表高度约束

    首先 这与动态单元格的高度无关 所以不要把它搞混了 我有一个场景 我创建了三张卡 详细信息卡 显示位置的具体详细信息 图表卡 根据选择显示不同的图表 更多详细信息卡 卡显示更多详细信息 以下是上述卡片的屏幕 查看以上屏幕的层次结构 Cont
  • 了解 malloc_history 转储

    如果您曾经问 过如何调试 Objective C 中的释放 分配问题 您将遇到这些可以帮助跟踪问题的环境设置 NSZombieEnabled 释放后保留对象 以便您可以获得指针等 MallocStackLogging 保留对象历史记录以供以
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • Objective-C 语法是什么,椭圆式点表示法? “……”

    我在 Joe Hewitt 的 Three20 源代码中注意到了这一点 而且我以前从未在 Objective C 中见过这种特殊的语法 甚至不知道如何在适当的谷歌搜索中引用它 来自 UITableViewDataSource TTSecti
  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • Eddystone 信标检测问题

    以下是我使用 iPhone iOS 9 检测 Eddystone 的代码 void viewDidLoad super viewDidLoad if CLLocationManager locationServicesEnabled loc
  • 如何对 iPad 应用程序进行类转储?

    我正在尝试运行 iPad 应用程序的类转储来探索其架构 我使用 The Unarchiver 提取了 ipa 文件 并从 Payload 文件夹中对 app 文件运行了 class dump 但是 我收到此错误 Generated by c
  • 如何执行 UIAlertAction 的处理程序?

    我正在尝试编写一个帮助程序类以允许我们的应用程序支持两者UIAlertAction and UIAlertView 然而 当写alertView clickedButtonAtIndex 方法为UIAlertViewDelegate 我遇到
  • 设置使用 iPhone 相机拍摄的图像的类型

    如果我们使用 iPhone 相机拍摄照片 图像将默认以 JPEG 格式保存 我想以其他格式 例如 PNG 保存捕获的图像 是否可以 当我们从应用程序调用 iPhone 相机时 是否可以通过代码执行此操作 我们可以设置捕获图片后必须保存的图像
  • NSPredicate 查询不包含特定字符串

    对这个问题进行了高低查找 但找不到我的答案 我正在查询核心数据以查找不等于指定字符串的所有记录 例如 所有不等于当前会话ID的记录 我已经尝试过这些但无济于事 NSPredicate predicate NSPredicate predic
  • 在 Objective C 中使用下划线作为属性名称前缀 [重复]

    这个问题在这里已经有答案了 我以前避免在变量名中使用下划线 这可能是我大学 Java 时代的遗留下来的 因此 当我在 Objective C 中定义属性时 我自然会这样做 In the header interface Whatever N
  • 自动布局:Y 位置为两个值中的最大值

    我有一个按钮 play Button 和两个 UIView myView 1 和 myView 2 它们的位置在执行过程中可能会发生变化 我希望 playButton 的顶部比 UIView 1 的底部或 UIView 2 的底部低 10
  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁

随机推荐

  • NUnit:字典断言

    我想要一个一班轮 在 NUnit 中 断言两个字典是否相同 即 我想要以下代码的简洁版本 public static void DictionaryAssert
  • WPF:触发动画 - 沿 Y 轴向下移动控件

    我有一个想要向下移动的控件MouseOver 不幸的是 当我将鼠标悬停在上面时 动画不会运行 但背景颜色会改变 Toolkit Dialog是一个继承的自定义对话框控件ContentControl 另外 在最终实现中我不会使用 MouseO
  • 在 Android 上获取用户当前位置的最简单、最可靠的方法是什么?

    The LocationManager对于只需要偶尔粗略估计用户位置的应用程序来说 Android 上的 API 似乎使用起来有点痛苦 我正在开发的应用程序本身并不是真正的位置应用程序 但它确实需要获取用户的位置才能显示附近企业的列表 它不
  • Rails 中的 Carrierwave 未加载默认 URL

    我在 Carrierwave 上传器中设置默认图像时遇到问题 它似乎在 URL 前面附加了一个奇怪的类 但不渲染图像 请参阅下面的我的代码 Helper encoding utf 8 class UserpicUploader lt Car
  • 从DataTable中获取布尔值

    如何检索数据集中的布尔值 我使用的是 Visual Studio 2003 我正在尝试以下操作 但它不起作用 if product inactive don t display and redirect to main page if db
  • 将项目数据传递给反应模式

    我有一张地图 它渲染了一些项目 其中一行在下面 a this setState openDeleteModal true gt Delete a 显然 我想在用户单击删除时打开一个模式 但我必须传递一些信息 例如项目名称 项目 ID 来执行
  • switch执行所有case语句

    有人能解释一下为什么我的循环从 0 到 7 吗 我只需要获取前 3 种情况 但程序正在经历所有情况 代码位于 show 方法中 for brojac 0 brojac lt 3 brojac switch brojac case 1 fig
  • 从 SqlDataReader 创建 JSON 字符串

    UPDATE 我想到了 看看我下面的回答 https stackoverflow com questions 5554472 create json string from sqldatareader 5597472 5597472 我正在
  • PHP、MySQL、SELECT 问题

    您好 我有一个看起来很复杂的问题 但我会尽力解释得更好 这是一个逻辑问题 我有一个数据库表 该数据库表 我们称之为表 A 包含一些字符串 字符串由以下行组成 ID auto increment Text Date Time Type IDA
  • Google Cloud Run 中的 PHP 服务突然停止响应所有传入请求

    我正在 Google Cloud Run 中运行 PHP 8 1 后端应用程序 后端连接到在 Google Cloud SQL 中运行的 MYSQL 数据库 在过去的两周里 我们发生了三次完全中断的情况 后端服务器不响应任何请求 导致我们的
  • C++ 通过以非抽象子类为参数的方法重写引用抽象类作为参数的纯虚方法

    我有以下代码 struct A f 0 struct Aa A f struct B void foo A 0 struct Bb B void foo Aa 现在我无法创建Bb类实例 因为我没有覆盖foo从课堂上B与所需的参数 我怎样才能
  • 是否可以使 setSystemUiVisibility() 影响整个系统,而不仅仅是您的应用程序?

    我希望制作一个应用程序 使用来自 Galaxy Nexus 的代码将软按钮变暗为点这个答案 https stackoverflow com a 8602997 183929 为了完整起见 这是代码 getWindow getDecorVie
  • 计算所选文本的位置 javascript/JQuery?

    如何通过计算紧随正文标记之后的偏移量来检索所选文本的位置 例如考虑以下 html div hi div div dude div 在从 i 在 hi 中 到 du 在 dude 中 中选择时 我需要将 2 作为起始位置 将 4 作为结束位置
  • Java 10 中“var”的优点/缺点[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 AFAIK var不是关键字Java It is 保留类型名称 我想知道在什么情况下我们应该使用 避免它 它的使用有什么原则吗 import j
  • 在 Osgi 中以编程方式注册 ServletContainer

    我正在使用 OSGI 开发 JAX RS 应用程序 其中资源是动态加载的 为此 我需要以编程方式注册 ServletContainer 然后我可以调用方法 ServletContainer reload ResourceConfig 我在支
  • VSCode中的Python路径:系统找不到指定的路径

    安装后VSCode 我已经有了python 2 7在我的机器上 我尝试在 Windows 10 上运行一个简单的脚本并收到此错误 运行 usr bin env python c Users jim Dropbox projects pyth
  • 在代码中将 CHAR(1) SQL 列转换为“char”时出错

    我从 SQL Server 2000 框中进行选择CHAR 1 称为的列Combo Label 它总是有一个A Z里面的人物 在测试过程中 它会毫无问题地转换前 70 个左右的项目 但随后会遇到Invalid Cast Exception
  • Honeycomb 中的片段加载旋转器/对话框

    将数据加载到我的片段中时 我希望在片段中间有一个不确定的旋转器 下图中的示例 以向用户显示内容正在该特定窗格中加载 在蜂窝中执行此操作的最佳方法是什么 我真的不想在操作栏中使用微调器 因为加载数据的位置并不是很明显 另外 我不想要一个不确定
  • 我应该将图像放在 iPhone 项目中的什么位置?

    我是 iPhone 开发新手 现在我有一个项目 它的目录结构如下所示 Tutorial Tutorial 1 png TutorialViewController h TutorialViewController m TutorialVie
  • 撤消在主线程之外执行的核心数据插入

    我正在编写一些使用NSOperation导入数据 我希望用户能够撤消NSManagedObject在导入操作期间创建的实例 据我所知 不可能使用NSManagedObjectContext undoManager对于在主线程之外执行的任何操