1

我正在尝试(从我在 heirachy 中的第三个孩子)使用以下内容加载根视图。这不起作用,运行以​​下代码时出现以下错误。

-[DetailViewController clickButton:]: unrecognized selector sent to instance 0x1161e00' 

代码:

 MapViewController *dvController = [[MapViewController alloc] initWithNibName:@"MapView" bundle:[NSBundle mainBundle]];
        [self.navigationController pushViewController:dvController animated:YES];
        [dvController release];
        dvController = nil;

这个完全相同的代码适用于其他视图,知道如何调试它。

4

2 回答 2

1

您为创建 MapViewController 并将其推送到视图控制器堆栈而编写的代码是正确的。

无法识别的选择器错误告诉您,您正在发送正在尝试调用不存在的方法(名为 clickButton:)。

我怀疑是拼写错误。我认为您很可能定义了一个按钮,该按钮调用代码来创建新视图。该方法应如下所示:

-(void) clickButton: (id) sender {
    MapViewController *dvController = [[MapViewController alloc] initWithNibName:@"MapView"  bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:dvController animated:YES];
    [dvController release];
    dvController = nil;
}

我会检查您是否有“:(id)发件人”部分。我在实现 -(void) clickButton {} 方法之前犯了错误,但消息实际上也发送了一个参数。

于 2009-05-20T04:58:21.067 回答
0
  1. 如果您以编程方式创建按钮并将目标设置为 clickButton,请确保存在 clickButton 方法

  2. clickButton 方法(根据错误)应该接受一个参数。所以方法的定义是

    • (IBAction)clickButton:(id)sender;
  3. 如果您已将 IBAction 映射到 IB 中的事件,则可以省略 :(id)sender 部分

  4. 要从基于导航的应用程序中的任何视图加载根视图控制器,请使用

    [[self navigationController:popToRootViewControllerAnimated:YES];

于 2009-05-20T13:30:43.847 回答