首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >'NSInvalidArgumentException‘

'NSInvalidArgumentException‘
EN

Stack Overflow用户
提问于 2012-11-07 16:47:47
回答 2查看 440关注 0票数 1

我在地图中有一些annotationView,我想用touchUpInside打开一个新的ViewController,但我得到了这个错误:

代码语言:javascript
运行
复制
 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-
 [MapViewController loadDetailListViewController:]: unrecognized selector sent 
 to instance 0xa042380'

以下是MapViewController.m中的代码:

代码语言:javascript
运行
复制
 -(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
      //....
     }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-07 16:52:35

变化

代码语言:javascript
运行
复制
@selector(loadDetailListViewController:) 

代码语言:javascript
运行
复制
@selector(loadDetailListViewController)

原因:@selector(abc)给出了一个没有任何参数的方法abc的选择器。@selector(abc:)给出了带有一个参数的abc方法的选择器。因此,@selector(abc::)给出了带有两个参数对象的abc方法的选择器。

Objective-C是多态的。这意味着相同的方法可能会多次出现。这意味着它们具有相同的名称,并被多次实现,以根据参数的数量(如果选择器语句中也给出了参数的名称,则根据参数的名称)提供不同的方法。

严格说来,abcabc:abc::可能是完全不同的,彼此独立。但这将是非常糟糕的风格。很常见的情况是,这些方法或多或少是相同的,它们的功能只是由传递给它的不同值驱动的细节上的不同而已。

票数 3
EN

Stack Overflow用户

发布于 2012-11-07 16:52:55

在选择器中使用loadDetailListViewController而不是loadDetailListViewController:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13266066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档