核心数据多级父-子上下文

2024-01-19

在我的应用程序中我有UITableViewController显示事件列表。该控制器使用 ManagedObjectContext 说ParentContext。现在,如果选择任何事件,则会显示详细的视图控制器,用户可以在其中编辑事件的详细信息。所以我创建了一个子上下文,

ChildContext with type "NSPrivateQueueConcurrencyType"

ChildContext whose parent Context is "ParentContext".

我的代码是:

  NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
  childContext.parentContext = self.context ;

现在,有些字段和关系再次需要深入研究。所以我为新视图控制器创建了另一个 ChildContext 说,

GrandChildContext with type "NSPrivateQueueConcurrencyType"

GrandChildContext whose parent context is "ChildContext"

这个过程进入另一个级别(从父级(tableView)到子级总共4级)

self.context - Parent Context
  |
  |
ChildContext
  |
  |
GrandChildContext
  |
  |
GrandGrandChildContext

我的实体看起来像这样

EntityA           -- ( Edit View Controller  - uses ChildContext )
 |
 |- Field1
 |
 |- Field2
 |
 |- RelationShip (1 to Many ) - ( Relationship Add / Edit View Controller - uses GrandChildContext )
     |
     |- Field1
     |    .
     |    .
     |- Field3
     |
     |- Relationship ( 1 to Many ) - ( Relationship Add / Edit View Controller - uses GrandGrandChildContext )
            |
            |- Field1
            |
            |- Field2

这是使用父子上下文的正确方法吗?因为在某一时刻我会喜欢1 NSMainQueueConcurrencyType MOC and 3 NSPrivateQueueConcurrencyType MOC.

如果不是?还有其他办法吗?

过多的子上下文是否会影响应用程序的性能?

最初我使用 Properties 和 NSArrays 来管理用户输入的数据,当用户点击完成按钮时,我将更新/创建托管对象。但这是一项乏味的工作,它使我的视图控制器变脏。所以我切换到父子上下文,这很容易保存/丢弃更新。

Thanks


您可能对多个子上下文有点过分,但只有一点点,而且您的总体方法是合理的。 MOC(托管对象上下文)是一个相当轻量级的对象。

我喜欢你的方法,在每个视图控制器/场景中,对适用于该场景的 MOC 有一个独特的参考。

有时将 MOC 视为会话或草稿本会很有帮助。匹配不是在 MOC 和实体之间,而是在 MOC 和逻辑工作单元之间。

如果您的某个向下钻取标记了用户可能想要放弃/取消的某些编辑任务的开始,那么这是分离子 MOC 并将其传递到新视图的好时机。如果需要,您可以回滚:或者甚至放弃 MOC,当您放松回到起点时。

另一方面,如果您只是编写静态信息查看器,则仅使用一个 MOC。在这种情况下,就没有必要使用更多,也没有必要从使用更多中受益。

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

核心数据多级父-子上下文 的相关文章

随机推荐

  • Emscripten 的 CMake 项目

    我想与 CMake 和 Emscripten 成为朋友 在 Emscripten 项目网站上没有找到更多或更少的信息文档 但他们提供了 CMake 工具链文件 所以我认为这应该是可能的 到目前为止 没有高级参数的非常基本的编译工作正常 但我
  • 如何在一定数量的请求后停止 scrapy 蜘蛛?

    我正在开发一个简单的抓取工具来获取 9 个搞笑帖子及其图像 但由于一些技术困难 我无法停止刮刀 它会继续刮这是我不想要的 我想增加计数器值并在 100 个帖子后停止 但是 9gag 页面的设计方式是在每次响应中只提供 10 个帖子 每次迭代
  • Vulkan 验证层无法在 Linux 上加载/工作

    我有基本的 Vulkan 应用程序 Hello Triangle 源自本教程 https vulkan tutorial com 在调试模式下 我使用两个验证层 VK LAYER KHRONOS validation and VK LAYE
  • 将 Jar 文件添加到 WEB-INF/lib [重复]

    这个问题在这里已经有答案了 我是 Eclipse Java 和 Linux 的新手 我搜索这个问题 但没有找到答案 我想编写一个操作 HBase 表的程序 所以我有一些与 HBase 相关的 Jar 文件 在普通的 Java 应用程序中 我
  • PHP 和 MySQL 与 Highchart

    有人可以帮助我 我是 php 和 highcharts 的新手 我尝试使用 mysql 和 php 填充我的图表 但是当我尝试运行它时 图表没有出现 我只看到一个空白网页 并且没有出现错误 她是我的代码 抱歉代码混乱
  • 作业完成完整执行后调用函数

    我们正在使用 Quartz Net 在 Windows 服务中按计划触发作业 我有一种情况 我必须每次触发一个工作5 minutes from Start DateTime till End DateTime 工作完成后我们需要计算Next
  • 函数gapi.client.load('oauth2', 'v2', function());不管用

    我已经使用网站中的 javascript sdk 使用 google plus 登录 两天前它就可以工作了 但现在它不起作用 因为 gapi client load oauth2 v2 function 未加载 即不工作 请帮忙 下面是我的
  • Perl 脚本内的 XML 编辑

    我正在尝试使用 perl pi e 编辑 xml 文件中的一行 如果我从命令行运行 perl pi e 命令 它工作正常 但是一旦我放入脚本并使用系统命令 我就会收到下面列出的错误 su 无效选项 i 尝试 su help 以获取更多信息
  • MySQL性能,内连接,如何避免使用临时和文件排序

    我有表1和表2 表格1 零件号 ID BRAND partnum 是主键 id brand 已 编入索引 表2 ID BRAND BRAND NAME id brand 是主键 Brand name 已 编入索引 表 1 包含 100 万条
  • Visual Studio 2015:更新 3 失败后出现多个包加载错误:Windows 10

    更新 我修好了 请参阅下面的答案 Visual Studio 2015 更新 3 失败后出现多个包加载错误 Windows 10 https stackoverflow com questions 38717145 visual studi
  • 如何隐藏配置文件以防止直接访问?

    我正在使用 Laravel 作为网络应用程序 上传了生产环境中的所有内容 发现有些文件可以通过 url 直接访问 例如http example com composer json http example com composer json
  • “pip install jq”在 Mac 和 Windows 上生成错误

    重复此issue https stackoverflow com questions 39785890 unable to install jq via pip 但第一个答案是错误的 jqWindows 上支持 第二个指的是brew所以我猜
  • 将 int 数组发布到 MVC 控制器 - 正确的方法签名是什么?

    下面是我发送到 ASP NET MVC2 控制器的 POST 请求的屏幕截图 使用 Firebug Net 面板 这是接收 POST 请求的控制器 操作方法 public ActionResult Search int skill int
  • 从 numba jitted 函数调用非 jitted 函数

    我的代码如下所示 jit nopython True def sum fn arg1 arg2 argn for i in xrange len arg2 For each bin l p fn1 arg1 arg2 argn res re
  • 如何动态地将项目添加到纸张下拉菜单中?

    我尝试使用 dropdownMenu appendChild menuItem 添加它 但正如我预期的那样 这不起作用 我在 Polymer 指南上找不到有关此问题的信息 也在这里找不到其他类似的问题 那可能吗 如果是这样 怎么办 纸张下拉
  • 人们如何处理 RESTful api 的身份验证(与技术无关)

    我正在考虑构建一些移动应用程序 因此 这些应用程序将通过 JSON 和 REST 例如 put post 等 与我的服务器 对话 如果我想确保客户端手机应用程序正在尝试执行需要某些 许可 的操作 人们该如何处理 例如 我们的网站出售东西 g
  • 如何在运行时通过脚本检查 PowerShell 中是否存在 cmdlet

    我有一个需要在多个主机 PowerGUI PowerShell ISE https technet microsoft com en us library dd315244 aspx等 但我遇到一个问题 有时其中一台主机下不存在 cmdle
  • 在 Maven 中,为什么运行“mvn clean”?

    我想知道跑步之间的主要区别是什么mvn compile and mvn clean compile是 在实践中 我明白真正的区别是什么mvn clean compile删除所有生成的文件并从头开始 但我们为什么要这样做呢 我可以假设mvn
  • WSDL.exe - 生成接口以及具体类,以便以后轻松进行伪造/模拟

    当 WSDL exe 生成 Web 服务的代理时 是否可以让 WSDL exe 生成接口以及具体类 或者代替具体类 我们正在使用来自 ASP Net 应用程序的第 3 方 Web 服务 并使用 WSDL exe 生成了我们的代理类 一切都很
  • 核心数据多级父-子上下文

    在我的应用程序中我有UITableViewController显示事件列表 该控制器使用 ManagedObjectContext 说ParentContext 现在 如果选择任何事件 则会显示详细的视图控制器 用户可以在其中编辑事件的详细