代码之家  ›  专栏  ›  技术社区  ›  Shawn

多窗口/NIB应用程序出现问题

  •  1
  • Shawn  · 技术社区  · 16 年前

    我的可可应用程序有问题。我将我的应用程序代理用作控制器,并在NIB文件中打开一个窗口。单击工具栏按钮可从另一个NIB打开另一个窗口。在第二个窗口上单击save(保存)将调用应用程序委托/控制器上的方法。这一切都很好。

    有没有更好的方法来构建这种类型的应用程序?你知道我哪里出错了吗?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Rob Keniger    16 年前

    听起来你正在创建你的第二个实例 AppController 在窗口的nib文件中初始化。不能这样做,当nib在运行时未归档时,nib文件中对象的每个实例都将被实例化。这意味着如果你有 实例 MainMenu.xib MyWindow.xib 档案 应用控制器

    通常情况下,处理此问题的方法是使用响应器链。在窗口笔尖中,指定 First Responder 作为你行动的目标。这意味着当调用action方法时,应用程序将询问当前关注的视图/控件(具有第一响应者状态的视图/控件)是否通过调用 -respondsToSelector: 方法并传入操作选择器。

    如果第一个响应者没有响应该方法,消息将沿着响应者链向上传播,直到找到确实响应该方法的对象。如果没有对象响应该方法,则 NSApplication 实例处理它并调用 NSBeep() .

    不适用 应用控制器

    Event Handling guide

    你不知道 使用响应器链。您可以通过调用 [[NSApp delegate] yourMethod] . 您还可以通过将应用程序控制器的引用作为实例变量添加到应用程序中来存储该引用 NSWindowController 对象加载nib并在创建时进行设置,如下所示:

    - (id)initWithAppController:(id)aController
    {
        self=[super initWithWindowNibName:@"YourWindowNibName"];
        if(self)
        {
            appController = [aController retain];
        }
        return self;
    }