在单独的 NIB 文件中的多个视图之间共享 NSArrayController

2023-11-22

首先,一些背景知识:我正在尝试在 Cocoa(适用于 OS X)中实现主从接口。也就是说,我有一个窗口有两个NSTableView显示两种不同类型的对象。对于这个问题,假设它们是仓库和包(选择一个与我的实际问题类似的例子。)在第一个表视图(在仓库上)中选择一行将显示属于该仓库的包列表第二个表视图。对于模型部分,我目前有一个NSMutableArray称为仓库对象的仓库,每个仓库对象都有一个NSArray包对象。需要注意的一件事是,warehouses 变量在 NIB 文件加载后被修改,因此NSArrayController必须通知。

现在,我尝试组织它,使“主视图”位于其自己的视图对象中,“细节”位于其自己的视图对象中。这意味着存在三个 NIB:WarehousesView NIB、WarehouseDetailView NIB 和 MainWindow NIB。

  • WarehousesView NIB 包含 WarehousesViewController 的一个实例(从NSViewController)和视图本身。
  • WarehouseDetailView NIB 包含 WarehouseDetailViewController 的实例和视图本身。
  • MainWindow NIB 包含主窗口、MainWindowController 的实例以及 WarehousesView 和 WarehouseDetailView 的实例。窗口本身包含一个NSSplitView,并且分割视图的视图连接到NIB文件中相应的视图实例。

这让我想到了问题的前半部分:

1) 这是分割 Cocoa 应用程序的应用程序视图的好方法吗?对我来说这是有道理的,因为稍后除了包裹库存列表之外,有关仓库的更多详细信息可能会添加到 WarehouseDetailView 中。

这是一个重要的问题,因为如果我跳过创建视图、将所有控件直接放在窗口中并放置其他所有内容(包括NSArrayController仓库和包对应的实例放入同一个 NIB 文件中。如果我什至不应该这样做,我就不需要问问题的后半部分。

问题的后半部分基本上是:

2) 我应该把它放在哪里NSArrayController如果我按照上述方式将其拆分,以便主从接口仍然有效,则对应于仓库和包?目前我正在使用 Cocoa 绑定,所以不知何故仓库的内容数组NSArrayController需要绑定到我的仓库数组和 Packages 的内容数组NSArrayController需要与仓库的选择绑定NSArrayController

我尝试了一些事情,但我无法让任何事情完全发挥作用。具体来说,我尝试将NSArrayController对于仓库进入 WarehousesView NIB 和NSArrayController用于将包放入 WarehouseDetailView NIB 中。这种方法的问题是我无法找到绑定包的方法NSArrayController到仓库的选择NSArrayController。我尝试过的另一件事是(1)将两者NSArrayController进入 MainWindow NIB,(2) 连接这些NSArrayControllers 到 MainWindowController 中的 IBOutlet,然后 (3) 通过它们的构造函数将这些变量传递到各自的视图控制器,(4) 通过 KVC 将它们公开为视图控制器中的属性,以及 (5) 将视图中必要的表列绑定到通过文件所有者的阵列控制器。结果什么也没出现,但也没有错误。如果其中一种方法是首选方法,我可以提供更多详细信息以帮助查看我是否做错了。

提前致谢!

编辑:我确实看过这个相关问题,并且他们似乎正在使用单独的实例NSArrayController如果我理解正确的话,每个 NIB 文件都有 s ,从设计的角度来看这似乎没有意义,但也许我错了?


第 1 部分:您当然可以做到这一点。我想说这是一个偏好问题。就个人而言,如果要在窗口中同时显示视图,我会将它们保留在同一个笔尖中。*不过,模块化也是一件好事。

第 2 部分:实际上,您可以将阵列控制器放在您喜欢的任何位置。您唯一需要担心的是获取每个对象所需的对您希望其拥有的信息的引用。如果你想要我的 2 美分,我会说将每个都放在笔尖中,并在视图中显示其内容。这将使你的详细视图设置更加困难,但它继续了你似乎想要的模块化。

您必须记住,笔尖中的每个对象都是一个真实的实例。 nib 会为您分配并初始化它们;如果你放一个MyClass一个笔尖中的物体,以及一个MyClass另一个笔尖中的对象,这些是two 不同的对象。对于 nibs 来说,有时这是一件棘手的事情:自动为您创建实例确实很方便,但是当您想要跨 nibs 执行操作时,这也意味着需要对引用进行一些摆弄。

听起来你把实例WarehouseView and WarehouseDetailView到您的个人笔尖和 MainMenu.nib 中,并期望它们是相同的对象。不会是这样的。您必须将笔尖中的对象链接到它们已经知道的对象。您必须根据您的具体情况来解决这个问题。

我不知道你的模型存储在哪里,也不知道你如何加载笔尖。不过,无论哪个对象执行加载操作,都可能是单个笔尖和应用程序其余部分之间的链接。这就是 nib 中文件所有者代理对象的用途——它为您提供了一个将 nib 中的对象与它们不知道的代码挂钩的位置。


*:如果您发现在 IB 中未将视图包含在拆分视图中,则可以更轻松地布局视图,您可以自行设置它们:将自定​​义视图对象放入 MainMenu.xib 窗口中,然后可以在它自己的 IB 窗口(尽管它不会位于应用程序的窗口中)。然后在某些内容中设置分割视图的子视图awakeFromNib.

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

在单独的 NIB 文件中的多个视图之间共享 NSArrayController 的相关文章

随机推荐

  • 无法连接到 Google 云连接服务器

    我尝试在我的服务器和 Google Cloud 连接服务器 CCS 之间打开 XMPP 连接 但它不起作用 我正在使用 PHP 进行编程并使用 JAXL 库 这是我的代码
  • 异常处理——显示发生错误的行号? [复制]

    这个问题在这里已经有答案了 可能的重复 在异常处理中显示行号 有人可以告诉我如何获取发生错误的代码的行号并将其显示到控制台吗 其他信息 例如文件名或方法名称 将非常方便 如果您需要文件和行号 则无需解析 StackTrace 字符串 您可以
  • Adobe Flash Builder (flex4):addChild() 在此类中不可用。

    我想将 swf 加载到 flex 4 应用程序中以便使用它的类 var ldr Loader new Loader ldr load new URLRequest file path to fileswf ldr contentLoader
  • 如何使用 swiftlint 来检查单个文件?

    我想使用 swiftlint 来检查单个文件 我该如何实现这个目标 检查文档https github com realm SwiftLint没有帮助 您还可以通过以下方式执行此操作 swiftlint path path to your f
  • 垂直和水平对齐 checkBoxGroupInput

    在类似的帖子中 如何在 R Shiny 中对齐一组 checkboxGroupInput 复选框仅垂直对齐 如我的示例 或仅水平对齐 R 水平闪亮显示 checkboxGroupInput 我想知道是否有一种方法可以在两种意义上实现这一点
  • 闪亮的 R 对齐按钮

    我的 U i 文件中有两个按钮 div style display inline block submitButton Analysis div style display inline block downloadButton downl
  • matlab 是否有像 python 中那样的列表理解之类的东西?

    我正在寻找类似 matlab 中的列表推导式的东西 但是我在纪录片中找不到类似的东西 在Python中它会是这样的 A i 50 for i in range 50 Matlab 非常喜欢 矢量化 您可以将示例写为 A 0 49 50 Ma
  • 使用tensorflow的数据集管道,如何*命名*“map”操作的结果?

    我有下面的地图函数 可运行的示例 它输入一个string并输出一个string and an integer in tf data Dataset from tensor slices我将原始输入命名为 filenames 但是当我从地图函
  • 宏作为另一个宏的参数

    我正在尝试将参数传递给宏SETBIT与另一个像这样的预定义宏 define SETBIT ADDRESS BIT N N ADDRESS 1 lt
  • 如何将 React 与 p5.js 结合使用

    我真的很喜欢p5 js和react js 所以我想知道如何将这两个结合在一起 但我无法做到这一点 所以我需要你的帮助 我真的无法为您提供一些代码示例 因为我不知道如何开始 所以我想做的是 1 创建反应应用程序 2 使用p5 js渲染画布 我
  • 格式化/缩进我的 HTML 代码的 PHP 函数/类? [复制]

    这个问题在这里已经有答案了 是否有 PHP 函数 类可以清理我的 HTML 代码 例如 html ul li item1 li li item2 li echo htmlClean html Outputs ul li item1 li l
  • MySQL 5.5 分区表(按 A-Z)

    据我了解 从 MySQL 5 5 开始 您现在可以按非整数值 例如 varchar 对表进行分区 我有一个表 在其中对单个 varchar 列执行大量查找 因此出于性能原因我想对其进行分区 在所有情况下 列的值都是单个字母单词 严格小写 a
  • 在一个线程上创建的 C# 控件不能成为另一线程上控件的父级

    我正在运行一个线程 该线程获取信息并创建标签并显示它 这是我的代码 private void RUN Label l new Label l Location new Point 12 10 l Text Some Text this Co
  • 证书的 Azure Function Key Vault 参考?

    我正在尝试按照所述在我的 Azure Function v1 中使用 Key Vault 引用here 它适用于秘密 但不适用于证书 这些文档根本没有提到证书 所以也许它们根本不受支持 我希望将其作为 Base64 字符串获取 我正在使用的
  • 比较 groovy 中的 null 和 number

    为什么 Groovy 中以下情况成立 0 gt null 是选择的结果还是compareTo 实现的结果 我正在使用 Groovy 2 0 5 在 Groovy 中null是最低可能的元素 所以一切都是 gt null assert tim
  • 使用 Cocoa-Touch 播放文档目录中下载的视频

    我试图让我的应用程序播放已下载到文档目录的视频文件 我知道该文件正在下载 但我似乎无法播放该文件 这是我的代码 IBAction play NSArray paths NSSearchPathForDirectoriesInDomains
  • 将多个字符串替换为多个其他字符串

    我正在尝试用多个其他单词替换字符串中的多个单词 该字符串是 我有一只猫 一只狗和一只山羊 然而 这不会产生 我有一只狗 一只山羊和一只猫 而是产生 我有一只猫 一只猫和一只猫 在JavaScript中是否可以同时用多个其他字符串替换多个字符
  • 在 C++ 中以相反的顺序打印我的链接列表

    所以我对 C 相当陌生 今天我决定坐下来了解链表是如何工作的 到目前为止 我玩得很开心 但是当我尝试以相反的顺序打印链接列表时遇到了问题 而不是颠倒链接列表的顺序 另外 我想在没有双链表的情况下执行此操作 include
  • 在SVN中共享文件

    我正在从 VSS 迁移到 SVN 但我不知道如何在 SVN 中共享文件 基本上我们在VSS中有以下结构 MOSS Components ComponentA bin ComponentB bin GAC Mirror GAC Mirror
  • 在单独的 NIB 文件中的多个视图之间共享 NSArrayController

    首先 一些背景知识 我正在尝试在 Cocoa 适用于 OS X 中实现主从接口 也就是说 我有一个窗口有两个NSTableView显示两种不同类型的对象 对于这个问题 假设它们是仓库和包 选择一个与我的实际问题类似的例子 在第一个表视图 在