我在地图中有一些annotationView,我想用touchUpInside打开一个新的ViewController,但我得到了这个错误:
 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-
 [MapViewController loadDetailListViewController:]: unrecognized selector sent 
 to instance 0xa042380'以下是MapViewController.m中的代码:
 -(void)loadDetailListViewController{
      if(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone){
    DetailListViewController *detailList =[[DetailListViewController 
    alloc]initWithNibName:@"DetailListViewController~iPhone" bundle:nil];
    detailList.title = self.chinaTable.title;
    detailList.chinaTable = self.chinaTable;
    [self.navigationController pushViewController:detailList animated:YES];
}else {
    DetailListViewController *detailList =[[DetailListViewController 
    alloc]initWithNibName:@"DetailListViewController~iPad" bundle:nil];
    detailList.title = self.chinaTable.title;
    detailList.chinaTable = self.chinaTable;
    [self.navigationController pushViewController:detailList animated:YES];
}
}
 - (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id 
    <MKAnnotation>)annotation {
       //......
     UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
       [rightButton addTarget:self action:@selector(loadDetailListViewController:) 
      forControlEvents:UIControlEventTouchUpInside]; //the error is here
      //....
     }发布于 2012-11-07 16:52:35
变化
@selector(loadDetailListViewController:) 至
@selector(loadDetailListViewController)原因:@selector(abc)给出了一个没有任何参数的方法abc的选择器。@selector(abc:)给出了带有一个参数的abc方法的选择器。因此,@selector(abc::)给出了带有两个参数对象的abc方法的选择器。
Objective-C是多态的。这意味着相同的方法可能会多次出现。这意味着它们具有相同的名称,并被多次实现,以根据参数的数量(如果选择器语句中也给出了参数的名称,则根据参数的名称)提供不同的方法。
严格说来,abc和abc:和abc::可能是完全不同的,彼此独立。但这将是非常糟糕的风格。很常见的情况是,这些方法或多或少是相同的,它们的功能只是由传递给它的不同值驱动的细节上的不同而已。
https://stackoverflow.com/questions/13266066
复制相似问题