我有一个名为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];
}
答案 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设计模式的基础而受益。