0

我有一个名为 MainMenu 的类,它有一个名为 switchViews 的方法,有 2 个参数,一个 NSWindow 和一个 NSView。

然后我有 AppDelegate,我想在“applicationDidFinishLaunching”中使用这个方法。

所以在 AppDelegate.hi 中导入了 MainMenu.h,在 AppDelegate.m 中我使用如下:

MainMenu *theMainMenu = [[MainMenu alloc]] init];
[theMainMenu switchViews:param1:param2;

没有警告或错误,它只是不调用该方法。

如果我复制并粘贴该方法而不是调用它,它可以正常工作,因此变量不是问题,如果它在不同的类中,似乎只是运行该方法时出错?

任何帮助将不胜感激。

提前致谢

切换视图方法:

- (void)switchViews:(NSWindow*)mainWindow:(NSView*)newView {
    NSView *dummyView;
    [theMainWindow setContentView:dummyView];
    [theMainWindow setContentSize:newView.frame.size];
    [theMainWindow setContentView:newView];
}

编辑:对不起,这只是一个错字。

解决方案:我在方法调用中使用了错误的参数。下面是工作代码:

- (void)switchViews:(NSWindow*)mainWindow:(NSView*)newView {
    NSView *dummyView;
    [mainWindow setContentView:dummyView];
    [mainWindow setContentSize:newView.frame.size];
    [mainWindow setContentView:newView];
}
4

2 回答 2

1
MainMenu *theMainMenu = [MainMenu alloc[ init]];

如果那是您的代码,那么它甚至没有运行,因为构建失败,因为该代码无效。

假设您的实际代码不包含语法错误,通常没有发生任何事情意味着您向nil. 要么-[MainMenu init]返回nil,要么实现switchViews::试图向它没有的对象发送消息。

假设您没有任何语句-[MainMenu init]to return nil,后一种情况更有可能。确保它创建了它需要的任何对象,或者,如果你的意思是它是基于 nib 的,请确保你已经连接了所有 MainMenu 对象的出口,并且你没有忘记加载 nib。

编辑:

- (void)switchViews:(NSWindow*)mainWindow:(NSView*)newView {
    NSView *dummyView;
    [theMainWindow setContentView:dummyView];
    [theMainWindow setContentSize:newView.frame.size];
    [theMainWindow setContentView:newView];
}

您将方法的第一个参数变量命名为mainWindow,然后将消息发送到theMainWindow.

如果 MainMenu 对象有一个名为 的插座theMainWindow,请确保它已连接,并删除多余的第一个参数。或者,关闭插座(或其他插座theMainWindow)并使用mainWindow.

此外,由于 AppDelegate(出于某种原因)正在将窗口传递给 MainMenu 对象,因此请确保 AppDelegate 实际上具有窗口。首先检查 AppDelegate 代码中“<code>param1”的值。

于 2012-04-17T16:32:52.133 回答
0

该代码无法编译(或者,如果可以编译,则它根本没有按照您的意愿进行操作)。

这没有语法意义:

MainMenu *theMainMenu = [MainMenu alloc[ init]];

不过,一般来说,您可能不希望分配和初始化最有可能已经实例化并显示在屏幕上的东西的新实例

在字里行间,我怀疑你会受益于复习面向对象编程的基础和 Cocoa 设计模式。

于 2012-04-17T16:32:03.683 回答