UIManagedDocument 中核心数据对象的状态保存和恢复策略

2024-02-09

我开始尝试向我的 iOS 应用程序添加对状态保存和恢复的支持,该应用程序有一个核心数据组件,我可以通过 UIManagedDocument 访问该组件。

我开始将恢复标识符添加到我的视图控制器中,并在我的 AppDelegate 和控制器中连接所需的函数(当前为空)。

我有一个可能被多个视图控制器引用的对象,因此我计划尝试在我的 AppDelegate 中保留和恢复它,然后让相关的视图控制器从 AppDelegate 检索该对象。这个时间可能很棘手,因为应用程序委托方法 didRecodeRestorableState 发生在所有视图已经调用自己的decodeRestorableStateWithCoder 方法之后。

我的主要问题是这个共享类以及多个 ViewController 都希望保留和恢复 NSManagedObject 属性。我希望能够使用对象的 URIRepresentation 来促进这一点,但我遇到的问题是我的 AppDelegate 将在 AppDelegate 的 willFinishLaunchingWithOptions 方法中打开我的 UIManagedDocument。它通过 UIManagedDocument openWithCompletionHandler 方法执行此操作。由于此打开的线程,在我的所有视图和应用程序委托已尝试恢复其保存的状态后,文档已成功打开。一旦文档可供使用,AppDelegate 就会发送通知,因此我的所有视图控制器都可以监听此通知。

我想我只是想知道这是处理这个问题的最佳策略,甚至是唯一的策略。我的对象需要保留它们恢复的 URIRepresentations,并且只有在文档(及其 NSManagedObjectContext)准备好后,才尝试实际查找并设置它们保存的相应 NSManagedObjects。因此,恢复发生的时间比执行恢复的调用晚得多,我假设通常会执行所有恢复工作。我担心控制器在等待文档打开然后正确初始化时是否可能会在短时间内显示为空。

在这种情况下,阻止和延迟打开我的文档是否有任何目的,所以是的,该应用程序需要更长的时间才能打开,但至少可以更正确地恢复任何视图出现之前所需的所有数据。是否运行任何计时器来确保某些方法不会花费太长时间?当我们处于这种不确定状态时,显示不同的视图会更正确吗?不太确定如何解决这个问题,但您可能会在其他应用程序中看到这种情况,例如依赖于网络的 Facebook 应用程序联系。

到目前为止,我似乎在文档中找不到此类问题的任何真正解释。

一如既往,非常感谢任何帮助!干杯


最后,我只是实现了 UIManagedDocument 加载完成时的通知。这些由所有具有要恢复的 coredata 管理对象的控制器拾取。在恢复期间,我保留编码的 URI,稍后当收到此 UIManagedDocument 就绪通知时,我只是将 URI 解码为各自的托管对象。

我描述的共享对象的问题是通过从 appDelegate 在一个地方进行编码和恢复来解决的,然后使用另一个通知发送给系统,告诉他们该共享对象现在已完全解码并可供使用。

不理想,涉及创建相当多的方法层次结构以确保所有对象都正确解码,但它工作正常。

遗憾的是,从那时起,我遇到了一个绊脚石,在我的 UIManagedDocument 完成打开之前,操作系统正在调用 UIDataSourceModelAssociation 协议方法。可悲的是,这意味着我无法做任何有用的事情。所以我真正需要做的就是推迟我的应用程序恢复,直到从 CoreData UIManagedDocument POV 加载所有内容。这个问题还在继续...

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

UIManagedDocument 中核心数据对象的状态保存和恢复策略 的相关文章

随机推荐

  • 如何使用缓冲区溢出攻击替换堆栈上的返回地址

    对于家庭作业 我正在执行一系列缓冲区溢出攻击 有人给了我一个要反汇编的程序 这是一个不正确调用的函数的 C 源代码gets 以及我应该强制程序调用的其他几个函数的源代码 对于其中一项任务 我必须 注入一些改变值的代码 然后 返回上述方法之一
  • 使用哪个 Java 库来录制连接的摄像机的视频?

    您可能认为有一个简单的解决方案 但没有 我的应用程序需要从 USB 火线 或任何连接 连接的相机捕获流 结果将是一个类似的文件输出 flv 我希望能够检测所有连接的摄像机并选择使用哪一台 同时使用一台或多台 gt 一个或多个输出文件 应用程
  • 不带绑定的验证规则

    我想在文本框上使用 ValidationRules 及其 UI 效果 而不实际将任何内容绑定到文本框 我想将文本框用于某些不绑定到任何内容但需要在焦点丢失后使用 ValidationRules 验证输入的输入 能做到吗
  • 如何创建仅可由特定类使用的构造函数。 (C++ Friend 相当于 C# 中的内容)

    据我所知 在C 中 不象C 中那样支持 friend 关键字 是否有另一种方法来设计一个类 可以实现相同的最终结果 而无需诉诸不可用的 friend 关键字 对于那些还不知道的人来说 Friend 关键字允许程序员指定类 X 的成员只能由类
  • 使用方法在 ArrayList 中循环

    在很多帮助下 我开发了一种方法 可以制作字谜词 然后将它们添加到ArrayList public void f String s String anagram ArrayList
  • 删除崩溃的 Innodb 表

    我无法删除 删除崩溃的 Innodb 表 我收到以下错误 错误 1051 42S02 未知表 帐户 如果我想创建它 我会收到以下错误 错误 1005 HY000 无法创建表 accounts errno 1 我的服务器在意外断电后会发生这种
  • 数 45 秒,暂停 20 秒,然后用不同的标题重复

    在尝试限制电池使用时 我不需要有繁忙的循环 所以我不确定如何解决这个问题 如果我有一个程序 允许某人唱歌 45 秒 然后他们暂停 20 秒喝一杯 然后重复唱一定数量的歌曲 我的计时器是在取消一次迭代并开始另一次迭代后 计时器无法正常工作 h
  • 使用asp.net中的web api通过http进行身份验证

    我观看并浏览了很多有关保护 ASP NET Web API 的页面 包括 http weblogs asp net jgalloway archive 2012 03 23 asp net web api screencast series
  • 为什么 Angular 构建会创建带有“es5”和“es2015”的文件,而不是“es6”(或者根本没有后缀)?

    我最近下载了Angular CLI 角度 cli 9 0 1 然后我继续创建一个新的应用程序 以便我可以创建一个新的 Angular 元素 将其打包并在另一个应用程序中使用它 在关注了几篇博客之后 我遇到的每个博客的最后一步都讨论了从放在
  • 在 Liferay 7 中创建自定义标签库

    我正在使用 Liferay 7 和 OSGi 模块编写一个应用程序 我需要创建一个跨所有模块 portlet 可用的自定义标签库 但我几乎不知道从哪里开始 你有什么主意吗 我应该将 taglib 定义 类和 JSP 存储在 OSGi 模块中
  • Laravel 502 网关错误错误

    我使用 Laravel 5 3 和最新的 Homestead 设置 当我向 API 发出 POST 请求时 根据日志文件 我收到此错误 2016 10 29 12 44 34 错误 776 0 28 recv 失败 104 连接 由对等方重
  • 如何停止正在运行的线程?

    from pyautogui import moveTo click rightClick write keyDown keyUp hotkey scroll import pyautogui import pyperclip import
  • 寻找 IPFW 以外的替代解决方案来减慢互联网连接速度

    我需要减慢 模拟坏的 互联网连接 我发现了一些文档 其中它是通过 ipfw pipeline 命令实现的 问题是在最新的 MAC OS 版本中 ipfw 已被弃用 并删除 我想知道 ipfw API 是否有其他替代方案 有谁知道最新的网络链
  • java 中什么样的全局变量是不好的做法?

    对于我的许多java项目 我广泛使用数据库 我通常做的是有一个property xml文件来保存我所有的字符串和设置 然后我就去上课CNST保存与 xml 文件中的静态常量相对应的所有静态常量 这些常量在程序启动时由 xml 文件初始化一次
  • 如何设置 Rake 任务进行播种

    这确实是一个关于 Rake Rails 以及一般依赖关系的新手问题 尝试让我的头脑了解所有这些如何组合在一起 基本上 我想要一个像 Seed rb 一样但单独调用的 Rake 任务 它添加了开发环境的测试数据 而我的seed rb则提供了所
  • getsockopt IPPROTO_SCTP、SCTP_STATUS 的“无效参数”

    设想 我创建了 SCTP 一对多套接字 以大写字母开头的函数调用相应的标准函数 检查错误并将 errno 打印到 stderr int sock fd msg flags char readbuf BUFFSIZE struct socka
  • DataGridComboBoxColumn 数据绑定

    我正在尝试数据绑定DataGridComboBoxColumn
  • 在 Java 中查找不可序列化字段的好方法

    我有一个相当复杂的 Java 对象需要序列化 几周前运行良好 在同时实现了很多之后 序列化现在失败并抛出以下异常 java io NotSerializableException sun java2d SunGraphics2D 我检查了所
  • 在自然断点处分割字符串

    在渲染标题时 使用 reportlab 如果标题长度超过 45 个字符 我想将其拆分为两行 到目前为止我有这个 if len Title lt 45 drawString 200 695 Title else drawString 200
  • UIManagedDocument 中核心数据对象的状态保存和恢复策略

    我开始尝试向我的 iOS 应用程序添加对状态保存和恢复的支持 该应用程序有一个核心数据组件 我可以通过 UIManagedDocument 访问该组件 我开始将恢复标识符添加到我的视图控制器中 并在我的 AppDelegate 和控制器中连