我有一个带有两(2)个XIB文件的应用程序;一个是主视图,另一个是帮助视图。我为两者创建了视图控制器。我在主视图XIB上有一个按钮,它调用帮助视图,其工作方式如下:
- (IBAction)bDisplayHelp:(UIButton *)sender {
HelpViewController *svc = [HelpViewController new];
svc = [[HelpViewController alloc] initWithNibName:@"HelpViewController" bundle:nil];
[self.view addSubview: svc.view];
}
在“帮助”视图中,我有一个按钮,我想将用户带回主视图。这是我的代码(不起作用):
- (IBAction)bBackToMainNib:(UIButton *)sender {
MainViewController *tvc = [MainViewController new];
tvc = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
[self.view addSubview: tvc.view];
}
我所做的一切基本上是来回走动。当我尝试返回主视图时,我在运行时收到此错误(不执行第一个语句,只是崩溃):
***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSCFString bBackToMainNib:]:无法识别的选择器发送到实例0x7d3586b0'
我做错了什么?
答案 0 :(得分:1)
很抱歉地说,但你做的一切都错了。首先,你在bDisplayHelp中的第一行是没用的,因为你在下一行重新定义了svc(你在bBackToMainNib中有同样的问题:)。用,
替换这两行HelpViewController *svc = [[HelpViewController alloc] initWithNibName:@"HelpViewController" bundle:nil];
其次,你bBackToMainNib:方法没有回到主控制器,它创建了一个主视图控制器的新实例。
第三,您不应该将一个控制器的视图添加到另一个控制器的视图中,除非您还将该控制器添加为子视图控制器(否则将取消分配视图控制器)。您可能应该出现(然后在您想要返回时关闭)HelpViewController,而不是将其视图添加为子视图(尽管,因为我不知道您的意图是什么,这可能不是最佳选择)。我建议你阅读"适用于iOS的视图控制器编程指南"了解iOS编程的基本范例。
至于你的实际错误,这是一个谜。错误消息是说你在字符串上调用bBackToMainNib:而不是你的控制器;我不确定这是怎么发生的。