NSOperationQueue 和 NSFetchedResultsController

2024-04-22

我使用队列和结果控制器的组合来更新和显示一些核心数据对象。

在我的 uitableviewcontroller 中,我每隔 X 秒调用一次主控制器对象中的方法。

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(test:)            userInfo:nil repeats:YES];

}

- (void)test:(NSTimer*)theTimer {

[[MainController instance] updatePersons];

}

在此方法中,自定义 NSOperation 对象将添加到我的主 Q 中。

- (BOOL)updatePersons {

UpdatePersonsOperation* u = [[UpdatePersonsOperation alloc] init];
[u setQueuePriority:NSOperationQueuePriorityVeryHigh];

[operationQ u];

[u release];

该操作本身创建一个新的 ManagedObjectContext 并尝试从 Web 下载一些 xml 并尝试更新 coredata 数据库...(此代码有效!)

在我的主控制器中,我收到上下文更改消息,并使用 mergeChangesFromContextDidSaveNotification 来合并和更新我的主对象上下文。所有结果控制器都使用这个主对象上下文。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationManagedObjectContextDidSave:) name:
                                        NSManagedObjectContextDidSaveNotification object:nil];

实际上一切正常,但是当我在 NSOperation 中插入一个新对象时,UI 需要 4-6 秒才能更新并显示这个新对象...此外,UI 会阻塞...不可能滚动或触发其他交互.. 。

当我不使用队列并且我将代码下载并更新对象到我的 uitableviewcontroller 类中的方法中时,我使用这个

[NSThread detachNewThreadSelector:@selector(codeFromUpdatePersonsOperation) toTarget:self withObject:nil];

一切都运行良好,没有任何延迟或 UI 冻结......

有人可以向我解释这种行为吗?

Thanks


另一个问题可能是更新 UI 需要在主线程上进行。我遇到了与您报告的相同的问题,最终发现如果您致电

[target performSelectorOnMainThread:@selector(methodToUpdateUI:) withObject:dataFromRetrievalOperation waitUntilDone:NO];

这将导致 UI 在线程完成处理后立即更新。否则,它会等待大约 5 秒,然后 UI 动画才会发生。

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

NSOperationQueue 和 NSFetchedResultsController 的相关文章

  • 为什么我需要在核心数据项目中使用原始访问器方法?

    为什么我需要在核心数据项目中使用原始访问器方法 我正在阅读有关核心数据的内容并注意以下内容 默认情况下 Core Data 动态地 创建高效的公共和原始的 获取和设置访问器方法 建模属性 属性和 管理对象的关系 课程 例如 给定一个实体 属
  • RestKit 对象与外键的映射关系

    RestKit 是否可以在不将外键存储为属性的情况下连接关系 即直接从 JSON 中的键路径存储 特别是 我有一个 Job has many Rooms 关系 房间的 JSON 不包含作业 而是分别加载 job id 1 name John
  • 使用每个实体包含许多图像的核心数据?

    我是 Core Data 的新手 正在开发我的第一个个人 iOS 应用程序 我有一个实体 我们称之为Car 其中有一个缩略图以及与其关联的其他图像库 数据使用同步到在线服务ASIHTTPRequest and JSONKit 该应用程序不需
  • 循环核心数据 NSSet 的正确语法

    每当我循环遍历核心数据关系 NSSet 时 我必须将集合转换为数组 for student in classroom students allObjects as Student print student name 或者我可以正常循环遍历
  • 使用 CoreData 进行 Swift 包单元测试

    我有一堆快速文件 它们提供了 CoreData 之上的一些服务 我的单元测试运行良好 我决定使用 XCode 11 将所有这些移至 Swift 包中 单元测试不再运行 运行时错误为caught NSInternalInconsistency
  • 如何按月对获取的日期进行分组

    我将数据插入到日期类型的核心数据中 但是当我尝试从数据库中获取数据时 我无法按月对它们进行分组 您可以找到我尝试解决方案的代码 但它不起作用 let groupedDict Dictionary grouping self lessons
  • 使用Core Data中的Cascade删除关系对象

    我希望使用核心数据执行一些简单的删除 但仅需要对此的一些建议 我有一个包含交易 名称 事件和日期实体的模型 该交易与其他每个实体都有链接 在应用程序中 当用户将信息添加到文本字段时 该信息会保存到 4 个选项卡的表格视图控制器中 第一个选项
  • 如何使用 Core Data (iPhone) 存储 CLLocation?

    我试图保存一个位置 然后使用 Core Location MapKit 和 Core Data 框架在地图上检索该位置 我所做的只是创建了名为 POI 的实体 并添加了诸如纬度 双精度类型 经度 双精度类型 等属性以及其他一些属性 简而言之
  • 今天 iCloud + Core Data(2015 年 7 月 10 日)

    几年前 Apple 发布了 Core Data 应用程序的 iCloud 同步 然后我发布了一个适用于 iPad iPhone MAC 的应用程序 其共享模型使用新的 Apple 机制 事情并没有按预期进行 同步机制有时不起作用 例如 就我
  • Swift 2.0 中的 countForFetchRequest

    我正在尝试使用countForFetchRequestSwift 2 0 中托管对象上下文上的方法 我注意到错误处理executeFetchRequest已更改为新的do try catch syntax func executeFetch
  • 将实体添加到核心数据

    我们有一个使用核心数据的应用程序 在下一个版本中 我想向现有实体添加一个新实体 只需添加新的然后从软件中填充它就可以了吗 还是有什么我必须考虑的事情 迁移有几种类型 最简单的是使用推断映射模型的轻量级迁移 这意味着您只需告诉它进行迁移 软件
  • 如何在核心数据中应用group by子句

    我正在实现 tableview 我想在 tableview 部分显示类名 并且我正在尝试获取 使用核心数据实现的数据库中的类值 我想使用类名上的 group by 子句获取数据 这是我的代码 AppDelegate appDelegate
  • Coredata错误setObjectForKey:对象不能为nil

    我正在尝试检查我的核心数据存储中是否有任何数据作为我的应用程序的恢复类型 基本上 如果用户处于最终视图 则 coredata 中会有一些数据不断更新 因此 他们处于最终视图中 然后应用程序崩溃 或者他们将其置于睡眠状态 然后应用程序从内存中
  • EXC_BAD_INSTRUCTION 的 CoreData 错误(代码=EXC_I386_INVOP,子代码=0x0)

    当我打开并发调试开关 com apple CoreData ConcurrencyDebug 1 来跟踪 CoreData 的所有并发问题时 在调用 insertingNewObjectForEntityForName 时不断发生崩溃 Xc
  • Xcode 4:获取请求模板变量?

    在 Xcode 3 X 中 您应该右键单击获取请求模板的谓词编辑器中的空白来指定变量输入而不是硬编码谓词 这是 XCode 4 中的哪里 我已经按住了选项 右键单击 选项单击等 但无法弄清楚 我认为X4不再有变量了 相反 我认为您必须选择一
  • 迁移大型 Core Data 数据库崩溃

    我有一个将产品存储在核心数据文件中的应用程序 这些产品包括作为 可转换 数据的图像 现在我尝试使用轻量级迁移添加一些属性 当我使用一个小型数据库对其进行测试时 它运行良好 但当我使用一个接近 500 MB 的大型数据库时 应用程序通常会因内
  • 具有多个 sqlite 文件的核心数据

    如何将 Core Data 与多个 SQLite 文件一起使用 每个文件都包含相同的结构 但数据是从不同的位置检索的 我希望能够在运行时根据应用程序设置在这些 sqlite 文件之间切换 当然 只需指向持久存储协调器 NSPersisten
  • 使用按计数分组的核心数据获取属性

    这是我想为 Core Data 编写的查询的 SQL 版本 SELECT Group Name COUNT Item Name FROM Item INNER JOIN Group ON Item GroupID Group ID GROU
  • Cocoa 基于文档的应用程序中的 MVC

    我目前正在对我的应用程序进行重构和重组 我意识到模型和视图及其控制器之间的一些分离已经减少 我希望进行一些清理 我的应用程序中使用了几个关键类 NSPersistentDocument NSWindowController 和模型类 NSP
  • 核心数据迁移失败,并显示“找不到源存储的模型”,但存在源的 ManagedObjectModel

    我有一个使用 core data 的可可应用程序 它现在是其托管对象模型的第四个版本 我的托管对象模型包含抽象实体 但到目前为止 我已成功通过创建适当的映射模型并使用 addPersistentStoreWithType configura

随机推荐

  • Node.js 中的 git 命令

    我想知道是否有人知道 进入 npm 包来使用 git 命令 我有一个nodejs项目 我想执行以下命令 克隆 git 创建分支 git pull request 来自创建的分支 我尝试了一些 npm 包但没有成功 任何帮助将不胜感激 谢谢
  • Pytest - 测试解析器错误:无法识别的参数

    我正在尝试测试一个非常简单的函数 由于多次尝试测试使用参数解析器作为参数的更复杂的函数而失败 来自 runfile py import argparse import os def get input args parser argpars
  • 扩展无法启用或安装的问题

    php 7 3 5 你好 我的扩展 ext http 有问题 composer 说我缺少 ext http 即使我在composer json 中写了这个 为什么 这就是这个确切的消息 问题1 您的系统中缺少请求的 PHP 扩展 ext h
  • 如何将 中的项目向右对齐

    我如何将下面的所有内容对齐到最右侧 div div
  • 在没有 DBCC INPUTBUFFER 的情况下获取 SQL Server 中的最后一个命令

    有没有办法在不使用的情况下获取最后执行的 SQL Server 命令DBCC INPUTBUFFER 例如 是否有包含此信息的系统视图或目录 Thanks 您可以将 SPID SQL 进程 ID 传递给以下内容 DECLARE sql ha
  • 字符串比较。如何将字符串与 std::wstring 进行比较? WRT STRCMP

    我试图比较两种我期望在某种程度上兼容的格式 因为它们通常都是字符串 我尝试使用字符串和 std wstring 执行 strcmp 并且我确信 C 专家知道 这根本无法编译 是否可以比较这两种类型 这里有简单的转换吗 你需要转换你的char
  • java:使用扫描仪类读取文本文件并将信息存储在数组中

    我有一个包含学生成绩的文本文件 例如 Kim 40 45 Jack 35 40 我试图从文本文件中读取这些数据 并使用扫描仪类将信息存储到数组列表中 任何人都可以指导我正确编写代码吗 Code import java io import j
  • Laravel 门面有依赖性吗?

    我读到 一个类不应该有太多的依赖关系 在一本书中 它指出 4 个依赖项可能表明类可能做了太多事情 假设我编写了一个使用 10 个依赖项的类 6 个类和 4 个外观 我应该只关心这 6 个类并将它们分开 还是也关心 4 个外观 如果有人想知道
  • 为什么 Jing 不允许在 id 属性中使用冒号(“:”)?

    我一直在努力反对 xsd ID 不允许在 id 属性中使用冒号 我第一次注意到这一点是在 Emacs 中使用 James Clark 的 nxml mode 时 因为它验证了我正在使用的 XHTML 文件 然后 我使用 Jing 针对 RN
  • Jquery Ajax - Tumblr API v2

    我试图深入了解 Tumblr 的黑暗世界 但无法理解如何克服以下错误 Uncaught SyntaxError Unexpected token 我相信这可能是因为我正在返回 json 但尝试使用 jsonp 这是我要发送的内容 funct
  • 互联网上的 UDP 多播?

    我不确定如何最好地解决我的问题 我有一个在远程计算机上运行的服务 用于接收和处理 UDP 数据包 我希望该服务能够将这些数据包重新发送给任何需要它们的人 可能是任何人 通常是一台机器 但也可能更多 我认为 UDP 多播将是理想的 该服务可以
  • 为什么我不能在 C# 中编写从基类到派生类的隐式运算符?

    public class Derived BaseClass public Derived string name base name public static implicit operator BaseClass Derived de
  • 如何使用 Java 从 MongoDB 读取日期(时间戳)

    我正在尝试以以下格式从 MongoDB 读取日期字段 Formate YYYY MM dd HH mm ss SSSSSS 2017 01 23 10 46 07 812000 DB2 2017 01 23T16 46 07 812Z St
  • 在 matplotlib (Python) 中使用 mplstyle 时出现错误键“axes.prop_cycle”

    当我尝试使用本地加载的外部样式表时 出现以下错误 Bad key axes prop cycle on line 270 in idt mplstyle You probably need to get an updated matplot
  • 数据模板中的数据绑定不起作用

    我有 UserControl 对多个演示文稿进行过滤 而该演示文稿又具有 ContentControl 内容是各个演示文稿之间有所不同的单独过滤控件 该方案在视觉上按预期工作 但数据绑定却不然 输出中没有数据绑定错误 DataContext
  • 对布尔值使用按位非运算符 (~) 是否会引发未定义行为?

    如果 C 程序将按位非运算符 应用于布尔值 是否会调用未定义行为 例如 以下程序定义明确吗 bool f false bool f2 f is f2 guaranteed to be true or is this UB bool t tr
  • 帮助我理解 boost::bind 的用法

    请看一下 Johannes Schaub 发布的示例 对向量对进行排序 如何根据对的第二个元素对向量对进行排序 https stackoverflow com questions 279854 how do i sort a vector
  • 数组的 numpy.shape 中的 L 和 numpy.type 中的 32 是什么?

    我正在尝试 numpy 数组的功能 下面是代码 import numpy as np Z np array 0 4 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0
  • 点列表的 3D 轮廓(凹壳)

    我有一个 C 中的 Vector3 点列表 我需要计算这些点的凹轮廓 确实有很多参考资料 特别是对于 凸 分辨率 由于格雷厄姆算法 我已经成功实现了 然而 由于我现在需要有效地计算凹轮廓 所以我迷失了 维基百科确实列出了很多用于凸计算的资源
  • NSOperationQueue 和 NSFetchedResultsController

    我使用队列和结果控制器的组合来更新和显示一些核心数据对象 在我的 uitableviewcontroller 中 我每隔 X 秒调用一次主控制器对象中的方法 NSTimer scheduledTimerWithTimeInterval 2