macos - 如何将 NSObjectController 与 Core Data 结合使用?

标签 macos cocoa core-data cocoa-bindings nsobjectcontroller

我花了一天多的时间试图找到一个简单的示例,说明如何使用 NSObjectController 与核心数据进行绑定(bind)。所有示例都是带有 NSTableView 绑定(bind)的 NSArrayControllers

如何设置一个带有核心数据的简单 NSObjectController 来自动保存和获取数据?假设您想将具有字符串属性的实体绑定(bind)到文本字段,您会如何执行此操作?

最佳答案

以下是界面构建器的基础知识。

  1. nstextfield 拖到 View 中(从对象库)

  2. 拖动nsobjectcontroller(同样)

  3. 打开绑定(bind)检查器。 Option-Cmd-7 或 View/Utilities/BindingsInspector。

  4. 选择上面的nsobjectcontroller。在 BindingsInspector 中,靠近底部的是 ManagedObjectContext 的参数。单击“绑定(bind)到”旁边的复选框。然后选择文件的所有者(从下拉列表中)。文件的所有者可能是您的 NSDocument。将 ModelKeyPath 设置为 ManagedObjectContext(注意小写的“m”)

  5. 现在将实用程序 View 切换到 AttributesInspector (Open-Cmd-4)。将模式从“类”设置为“实体”。输入您的 BusinessObject 名称或模型名称。例如“员工”。

  6. 选择新的 nstextfield。在 BindingsInspector 中,选择“值”。选中“绑定(bind)到”并选择上面的 nsobjectcontroller(从下拉列表中)。

  7. 对于 Controller 键,选择“选择”。

  8. 对于模型 key 路径,选择模型属性(但不是关系),例如“名称”。

现在通过添加第二个 Controller (nsarraycontroller)进行实验。它们与关系相关,而不是与属性相关。因此,数组具有复数“Content Set”,而不是单数“Content”。关系具有底层 NSSet,而所有属性都是 NSObject 的子类,这一点毫无意义。没有整数, float 。但是 NSNumber、NSString。

  1. 选择新的 nsarraycontroller。在内容集中选择“绑定(bind)到”。选择第一个 nsobjectcontroller。 CONTROLLER KEY 是“选择”,而 MODEL KEY PATH 是关系名称,例如“员工”

  2. 设置一个 NSTableView,包含几列。 (表格有许多行来容纳集合中的项目,并且有许多列来容纳实体中的各种属性)

  3. 选择一个表列。选择“绑定(bind)到”并选择 nsarraycontroller。

  4. 这次 CONTROLLER KEY 是“arrangedObjects”(不是选择)。 MODEL KEY PATH 只是一个属性名称,如“name”。

请注意,NSNumber 和 NSDate 更喜欢 NSFormatters,因此将它们(从对象库)拖到 nstextfield 或表列中,以将数字和日期转换为漂亮的字符串。

关于macos - 如何将 NSObjectController 与 Core Data 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16883967/

相关文章:

macos - 如何在Mac OS X上安装libffi-dev

c - C/Objective-C 中的 ANSI 颜色提取库

objective-c - Cocoa 中的网络多人游戏?

objective-c - CoreData 可以处理多态子类吗?

ios - 核心数据性能 : predicate on more to-many relationships

objective-c - 锁定/解锁 mac osx

node.js - 尝试安装 pm2 时出现错误

c# - 从 Mac 上的 Rider 附加到 Azure Functions 的调试器

cocoa - 使用 PDFKit 界面显示 pdf 文件

ios - 核心数据迁移 : 'Can' t merge models with two different entities. ..'