1

目前,我有一个 managedContext、许多相互关联的实体的 NSArrayController,以及几个 Windows,每个 Windows 都使用 1 或 2 个 NSArrayController。Windows 使用核心数据绑定,所有这些都是通过在 IB 中完成的可可绑定设置的

我现在有 1 个笔尖 (xib),里面有所有东西。通常在使用我的应用程序时,我只会打开其中一个窗口,而我不想加载其他所有内容。因此,按照 Apple 的建议和常识,我想闯入许多 nib(理想情况下,每个 Window 一个)

就如何加载单独的 nib 文件而言,我很好,但我怎样才能将这一切拆分并仍然保持它们相互链接?似乎当我创建一个新的笔尖时,我无法在它和另一个之间建立联系。这有很多原因是有道理的,但是我该怎么做呢?我是否只是切换到以编程方式进行所有绑定,然后在笔尖加载时设置我的绑定?也许将我所有的 NSArrayControllers 放在一个中央 nib 中并一次加载它们,然后在我访问该功能并在那时进行绑定时加载每个 Window 的 nib 是有意义的?

4

3 回答 3

0

您必须在代码中创建必要的绑定。我不知道您的应用程序的架构,但总的来说,我建议您在 nib 的不同窗口控制器之间共享上下文。在每个 nib 中,您可以将(数组、树、对象、...)控制器绑定到上下文。

mmalc 示例很好地解释了绑定的工作原理。

绑定上的 ADC

于 2010-07-07T06:31:10.203 回答
0

将视图控制器 (VC) 紧​​密连接在一起是一个设计错误。对于小型应用程序来说,单向传递一大块数据通常是可以的,但理想情况下你甚至不想这样做。

理想情况下,数据模型并且只有数据模型会记住视图/VC 之间的数据。每个 VC 只与数据模型及其视图通信。设计目标是封装每个 VC 控制器,使其可以独立工作而无需参考任何其他视图。

实现这一点的关键是要认识到数据模型是应用程序的实际核心。这就是应用程序的关键逻辑所在。设计良好的数据模型应该与 UI 无关,并且能够支持任何类型的界面。例如,相同的数据模型应该支持视图 UI、网页 UI、命令行 UI 或脚本界面。

例如,假设您有一个具有核心功能的应用程序来捕获两个数字,将它们保存,将它们相加并返回结果。在 VC 中进行加法并立即显示结果是很诱人的。但是,由于这是一个核心功能,数据模型应该进行添加。这样,任何视图或任何界面都可以通过引用数据模型中的函数轻松添加数字。如果你想添加额外的视图,每个新的 VC 只需要知道数据模型,而不是任何其他 VC。

这还有一个实用的优点,就是可以很容易地将应用程序分成多个 nib。每个 VC 都有自己独立的 nib。由于每个 VC 只与数据模型通信,因此您可以仅在需要时以任何顺序加载 nib(只要 VC 的数据在数据模型中。)

您可能需要退出并重新考虑您的整体应用程序设计。将连接 VC 的逻辑和数据移动到数据模型中。然后将 VC 分解为模块化 nib 将很简单。

于 2010-07-07T15:28:39.357 回答
0

您无法在笔尖之间进行连接,但如果这些笔尖共享一个控制器,您可以通过该控制器进行连接。此外,当您创建这些新窗口时,您可以将 传递NSManagedObjectContext给新的 nib,然后绑定到它。

例如,如果您NSManagedObjectContext在 AppDelegate 中进行了配置(最常见),那么您可以NSManagedObjectContext在 AppDelegate 创建它时将其传递给下一个窗口。在与该窗口关联的 nib 中,您可以NSManagedObjectContext在窗口的控制器上设置与该属性的绑定并绑定到它。

更新

任何对象都可以跨 nib 引用,只要它位于您的控制器中的某个位置。然而,跨窗口引用数组控制器通常是一个糟糕的设计。如果您希望传递选定的项目,请考虑使用通知或其他方式仅传递对象。硬接线一切都非常脆弱,表明设计有问题。MVC 和依赖注入是您通常应该针对的两种设计。

于 2010-07-07T13:04:49.363 回答