使用Core Data将nib拆分为多个nib文件

时间:2010-07-07 06:06:30

标签: cocoa core-data nib

目前我有一个managedContext,许多实体的NSArrayControllers都非常相互关联,还有几个Windows各自使用1或2个NSArrayControllers。窗口使用核心数据绑定,所有这些都是通过在IB中完成的可可绑定来设置的

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

我就如何加载单独的nib文件一样好,但是如何将它们全部拆分并仍然保持彼此链接?似乎当我创建一个新的笔尖时,我无法将它与另一个连接起来。这有很多理由,但那我该怎么做呢?我是否只是以编程方式切换到执行所有绑定,然后在nib加载时设置我的绑定呢?将所有NSArrayControllers放在一个中心nib并将它们全部加载,然后在我访问该功能时加载每个Window的nib并在那时进行绑定可能是有意义的吗?

3 个答案:

答案 0 :(得分:0)

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

mmalc samples对绑定的工作方式给出了很好的解释。

ADC on Bindings

答案 1 :(得分:0)

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

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

更新

任何对象都可以跨nib引用,只要它位于控制器的某个地方即可。但是,在Windows中引用阵列控制器通常是一个糟糕的设计。如果你想要传递选定的项目,那么考虑使用通知或其他东西来传递对象。硬接线一切都非常脆弱,表明设计有问题。 MVC和依赖注入是你应该针对的两种设计。

答案 2 :(得分:0)

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

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

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

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

这也具有使应用程序易于分解为多个笔尖的实用优点。每个VC都拥有自己独立的笔尖。由于每个VC仅与数据模型通信,因此只能在需要时以任何顺序加载nib(只要VC的数据在数据模型中。)

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