使用 NSDocument 时如何将故事板视图绑定到核心数据实体?

2024-04-01

我正在构建一个使用核心数据、NSDocument、故事板和 Cocoa 绑定的 OS X 应用程序。

我的期望是发生以下情况:

  1. 一个实例MyDocument (NSDocument子类)被创建。

  2. MyDocument创建核心数据NSManagedObjectContext代表文档的数据。

  3. MyDocument实例化一个NSWindowController通过其标识符从故事板中获取。

  4. 在故事板中,窗口控制器包含DocumentEditorViewController (NSViewController子类),用于显示和编辑文档。

  5. 在故事板中,DocumentEditorViewController has an NSArrayController这必然是MyDocument的托管对象上下文。

  6. 在故事板中,DocumentEditorViewController有一个绑定到的表视图NSArrayController.

这样,UI 中的任何更改都会一直传递到NSManagedObjectContext,没有任何粘合代码。

我希望这很简单,因为我相信我正在按照它们的预期方式使用这些技术。但是,我无法使绑定正常工作,特别是在步骤 5 和 6 中。我发现的所有项目模板和示例项目要么不使用核心数据,要么不使用故事板,或者不使用NS文档。

哪些对象应该绑定到哪个? NSArrayController 类、键和键路径应该是什么?

回答这个问题的另一种方法是指出一个同时使用所有这些技术的工作示例项目。


使用 Core Data、Storyboard、NSArrayController、NSTableView 和 Bindings 创建示例 Xcode 基于文档的应用程序项目的步骤。

Step 1创建一个 Xcode 项目。选择 OS X Cocoa 应用程序,然后选择“使用情节提要”、“创建基于文档的应用程序”和“使用核心数据”。

Step 2选择数据模型。添加实体“Person”和字符串属性“name”和“address”。

Step 3选择Main.storyboard。将 NSArrayController 添加到视图控制器场景。将模式设置为“实体名称”并将实体名称设置为“人员”。选中“准备内容”。绑定Managed Object Context阵列控制器的View Controller, 模型关键路径representedObject.managedObjectContext.

Step 4转到视图控制器场景的视图。删除“此处是您的文档内容”。添加一个 NSTableView。绑定Content to Array Controller, 控制器键arrangedObjects. Bind Selection Indexes to Array Controller, 控制器键selectionIndexes. Bind Sort Descriptors to Array Controller, 控制器键sortDescriptors.

Step 5 Bind Value表视图中的文本字段的Table Cell View, 模型关键路径objectValue.name and objectValue.address。选中“有条件设置可编辑”。

Step 6将两个按钮“添加”和“删除”添加到视图控制器场景的视图中。将动作与动作连接起来add: and remove:阵列控制器。

步骤 7(目标-C)选择文档.h。在方法中makeWindowControllers,替换语句[self addWindowController:… by

NSWindowController *aWindowController = [[NSStoryboard storyboardWithName:@"Main" bundle:nil] instantiateControllerWithIdentifier:@"Document Window Controller"];
[self addWindowController:aWindowController];
aWindowController.contentViewController.representedObject = aWindowController.document;

第 7 步(快速)选择 Document.swift。在方法中makeWindowControllers,在最后之后self.addWindowController(windowController) add

 windowController.contentViewController!.representedObject = windowController.document

Step 8构建、运行、测试。

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

使用 NSDocument 时如何将故事板视图绑定到核心数据实体? 的相关文章

  • 多个 NSEntityDescription 声明 NSManagedObject 子类

    我正在创建一个允许我使用核心数据的框架 在框架的测试目标中 我配置了一个名为的数据模型MockModel xcdatamodeld 它包含一个名为MockManaged有一个单一的Date财产 为了测试我的逻辑 我正在创建一个内存存储 当我
  • 如何在 Core Data 中进行 NSManagedObject 的深度复制

    我正在尝试复制核心数据中现有的 NSManagedObject 和相关子对象 我似乎找不到一个简单的方法来做到这一点 我有一个从核心数据数据库填充的 NSArrayController 我想获取 SelectionIndex 处的对象并进行
  • 在代码中使用通用 Int - 在 Core Data iOS 中使用 32 位或 64 位 Int?

    我正在用 swift 编写一个应用程序 通过苹果的核心数据保存其数据 在我的代码中 所有整数都被声明为 Int 因为这样更灵活 并且编译器会根据代码运行的设备调整这些整数 但是 当我想使用核心数据保存这些 Int 时 我必须选择 32 位或
  • 复杂对象上的自定义 NSSortDescriptor

    这是我的第一篇文章 如果我可能不尊重所有惯例 我很抱歉 尽管我会尽力而为 我以前总是在 SO 上找到解决我的问题的方法 但我完全陷入了一个相当复杂的可可问题 我正在尝试对 CoreData 对象列表进行复杂的排序 我有一个由 Book 对象
  • NSOperationQueue 和 NSFetchedResultsController

    我使用队列和结果控制器的组合来更新和显示一些核心数据对象 在我的 uitableviewcontroller 中 我每隔 X 秒调用一次主控制器对象中的方法 NSTimer scheduledTimerWithTimeInterval 2
  • 如何防止“CoreData无法完成故障”?

    我们偶尔会收到 CoreData 无法完成故障 的信息 我们已阅读 Apple 文档 但不清楚允许保留哪些内容 我们非常小心地为每个线程创建一个上下文等 但是 我们的应用程序正在做的一件事是我们在 UIViewController 上保留
  • existingObjectWithID 与 NPrivateQueueConcurrencyType 发生死锁

    我遇到了冻结 死锁 NSPrivateQueueConcurrencyType并发类型而不是NSMainQueueConcurrencyType 我的上下文初始化 managedObjectContext NSManagedObjectCo
  • 强制设置核心数据检查点?

    我编写了一个通过 Core Data 搅动大量数据的应用程序 用户在后台退出应用程序后 我会清理这些数据 由于 WAL 检查点似乎是导致 UI 暂停的主要原因 因此我还想强制使用 WAL 检查点 是的 我知道创建第二个核心数据堆栈 这也将完
  • 使用启动屏幕 (.xib) 会停止缩放

    据我了解 iOS 8 的应用程序应该有一个故事板文件作为启动屏幕而不是图像 我创建了一个非常简单的启动屏幕文件 它具有任意宽度和任意高度 并且有一个纯文本标签 上面写着 占位符 并将其设置为我的启动屏幕 然而 当我尝试在 iPhone 6
  • 如何在 iOS 故事板中使用自定义字体来支持动态类型辅助功能大小

    我怎样才能使用动态类型文本样式 https developer apple com library ios documentation StringsTextFonts Conceptual TextAndWebiPhoneOS Custo
  • 使用每个实体包含许多图像的核心数据?

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

    已经有很多关于此的主题 但我还没有找到适用于 Swift Xcode 6 2 的解决方案 为了在 Swift 中测试 Core Data 支持的类 我生成了新的托管对象上下文 然后将其注入到我的类中 Given let testManage
  • 如何让NSManagedObject不出错?

    我目前正在调试另一个开发人员编写的一个大项目 该项目使用CoreData我对此很陌生 我遇到了崩溃 这是由于某些NSManagedObject是一个错误 我对什么是错误不太了解 我想将对象转换为 非错误 看看它是否有帮助 阅读文档让我想到t
  • 如何为现有核心数据实体添加更多属性?

    我有一个正在使用核心数据的项目 我需要向现有实体 列 添加更多属性 列 如果我手动将属性添加到数据模型应用程序崩溃 这是由于我用来将数据插入表的上下文保存之前 请帮助 谢谢 所以我的问题是我不知道这个持久存储协调器代码去了哪里 事实证明它是
  • 如何在核心数据中保存通用测量<单位>?

    如何在核心数据中保存和检索通用测量 我想做的是保存Measurement
  • 删除核心数据中的对象

    我的核心数据模型中有一个实体 如下所示 interface Selection NSManagedObject property nonatomic retain NSString book id property nonatomic re
  • Swift 2.0 中的 countForFetchRequest

    我正在尝试使用countForFetchRequestSwift 2 0 中托管对象上下文上的方法 我注意到错误处理executeFetchRequest已更改为新的do try catch syntax func executeFetch
  • NSUndoManager 会撤消后台发生的更改吗?

    我有一个编辑视图控制器 我正在使用 NSUndoManager 它是我的持久性存储 核心数据项目 的一组 我的应用程序的功能之一是与外部服务器同步 我想知道的是 如果我正在视图中编辑某些内容 同时应用程序正在与服务器同步 如果我改变主意并决
  • EXC_BAD_INSTRUCTION 的 CoreData 错误(代码=EXC_I386_INVOP,子代码=0x0)

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

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

随机推荐