我有一个AppController类,以通常的方式在我的应用程序中查看视图/控件。
我的应用程序主窗口上有一个按钮,导致AppController实例化一个新的窗口控制器(accountPanelController)并显示该辅助窗口:
- (IBAction) showAccountPanel:(id) sender
{
//Is accountController nil?
if (!accountPanelController) {
accountPanelController = [[AccountPanelController alloc] init];
}
[accountPanelController showWindow:self];
}
完成新窗口后,我想将从辅助窗口控制器收集的数据发送到AppController中的方法:
- (IBAction) close: (id) sender
{
NSLog(@"Close detected");
[AppController addAccount:0];
[self close];
}
然而,当我尝试从新窗口控制器调用AppController中的addAccount方法时,我得到一个“'AppController'可能无法响应'+ addAccount'”警告。
这似乎与AppController是一个类而不是对象实例化有关,因为AppController中的方法被称为-addAccount(而不是警告中报告的+ addAccount)。实际上,如果我将目标方法的名称更改为+ addAccount而不是-addAccount,则不会出现警告(但程序在执行时崩溃)。
鉴于我实际上并没有自己实例化AppController(我想这会在NIB启动期间以某种方式发生),有没有人有任何想法如何将数据发送到AppController方法?通知似乎有点过分......
非常感谢。
答案 0 :(得分:4)
我推荐以下关于Apple Mac开发中心的介绍文章:Communicate with Objects - #Notifications
的更新强>:
我指出了相关锚点(通知)的链接。
您的代码示例中的问题是,您调用类方法(带有+的方法),但是您实现了一个实例方法( - )。
因此,一个简单的解决方法是获取AppController
(代码中可能为self
)的(共享)实例,并向其发送addAccount:
消息。
但我鼓励你先阅读这篇文章。
也许您可以通过向您的控制器发送通知(NSNotification)来解决您的问题。
<强>更新强>
另一个有趣的读物可能是this SO question regarding the difference between class methods and instance methods。
答案 1 :(得分:1)
只需提供一个intiWithOtherController方法并将其添加为:
accountPanelController = [[AccountPanelController alloc] initWithOtherController:self];
只是通过自我,所以你需要这样的东西:
(AccountPanelController *) initWithOtherController:(OtherController *)
现在你有一个指向otherController的指针,你可以这样做:
[otherController addAccount:0]