app控制器和窗口控制器之间的引用

时间:2012-01-26 04:47:18

标签: cocoa

如果有公开鞭挞的风险,我希望有人可以澄清我对app控制器和窗口控制器之间通信的理解。这是使用xcode4的场景。

使用默认的AppDelegate.h和.m作为“控制器”(也是MainMenu.xib的委托)。有一个名为int counter的ivar。

创建了page.xib和PageController.h以及.m(子类NSWindowController)。将其导入AppDelegate.m

使用IBAction创建和查看页面对象。像这样: if(!page1){   PageController * page1 = [[Page

if (!page1) {
    page1 = [[PageControoer alloc] initWithWindowNibName:@"page"];
}

[page1 showWindow:sender];

因此弹出新窗口,我们可以按下按钮等。新窗口的代码全部在PageController.h和.m中。而且事情基本上都有效。

这就是背景,这里是我困惑的地方。

a)问题:假设我想在AppDelegate.h中从PageController访问名为counter的原始ivar。检索或更新变量。我会采取什么方法?

b)确认:假设我回到AppDelegate并想要从page1访问选择器。我相信我可以这样做:[page1 runaction];或[[page1 variable] setStringValue:@“hello”]; (这符合,但我不确定它是否真的有效,因为我无法将更改添加到xib视图中。)

好的和笨蛋。假设另一个视图是用另一个视图控制器调用它调用它的Page2Controller.h和.m。 c)数据如何在页面和page2之间流动 - >通过AppDelegate还是直接?将它们连接在一起的语法是什么样的?

我一直在关注教程,但他们并没有真正涵盖这种来回传递。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

a)通常,如果您想拥有控制器访问的数据,它应该在一个模型中,以某种方式给予它们访问权限。您可以使用以下方法访问应用程序委托中的内容:

AppDelegate* appDelegate = [[NSApplication sharedApplication] delegate];
[appDelegate <some method>];

b)我不明白你在问什么。如果app委托有一个指向page1的指针,那么是的,你可以直接调用它。

c)同样,您应该拥有某种数据模型。当用户更改视图时,控制器应更新数据模型。例如,您可以使用通知,IBAction和直接调用来进行更新。您应该查找Model, View, Controller设计模式。