从其他类调用方法什么都没做?

时间:2012-04-17 16:27:50

标签: objective-c cocoa

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

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

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

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

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

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

非常感谢任何帮助。

提前致谢

switchViews方法:

- (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];
}

2 个答案:

答案 0 :(得分:1)

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

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

假设您的实际代码不包含语法错误,通常不会发生任何事情,即您向nil发送了一条消息。 -[MainMenu init]返回nil,或者switchViews::的实现尝试向其没有的对象发送消息。

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

编辑:

- (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代码中的“param1”值。

答案 1 :(得分:0)

该代码无法编译(或者,如果确实如此,它根本不会执行您想要的任何操作)。

这没有句法意义:

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

但是,一般情况下,您可能不希望分配&初始化新实例最有可能已经实例化的内容

在这些内容之间进行阅读,我怀疑你会因为面向对象编程和Cocoa设计模式的基础而受益。