【问题标题】:reference between app controller and window controllers应用控制器和窗口控制器之间的引用
【发布时间】:2012-01-26 04:47:17
【问题描述】:

冒着公开鞭打的风险,我希望有人能澄清我对应用程序控制器和窗口控制器之间通信的理解。这是使用 xcode4 的场景。

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

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

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

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

[page1 showWindow:sender];

所以新窗口弹出,我们可以按下按钮等。新窗口的代码都在PageController.h和.m中。一切正常。

这就是上下文,这就是我感到困惑的地方。

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

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

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

我一直在关注教程,但它们并没有真正涵盖这种来回消息传递。感谢大家的帮助!

【问题讨论】:

    标签: cocoa


    【解决方案1】:

    a) 通常,如果您想要让控制器访问的数据,它应该在一个模型中,它们可以通过某种方式访问​​。您可以使用此方法访问应用委托中的内容:

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

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

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

    【讨论】:

    • 感谢您的帮助。这就说得通了。我正在尝试完成一些创建和使用模型的教程,并且仍然加快了可可的速度。这个问题与我正在开发的一个应用程序有关,该应用程序用一个漂亮的 gui 包装了一些命令行功能。再次 - 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2014-04-10
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多