1

マップに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
      //....
     }
4

2 に答える 2

3

変化する

@selector(loadDetailListViewController:) 

@selector(loadDetailListViewController)

理由:パラメーターなし@selector(abc)でメソッドのセレクターを指定します。1 つのパラメーターを持つメソッドのセレクターを指定します。結果として、 2 つのパラメーター オブジェクトを持つメソッドのセレクターを提供します。abc@selector(abc:)abc@selector(abc::)abc

Objective-C はポリモーフです。つまり、同じメソッドが複数存在する可能性があります。つまり、それらは同じ名前を持ち、複数回実装されて、パラメーターの数に応じて (またはパラメーターの名前がセレクターステートメントでも指定されている場合はパラメーターの名前に応じて)、メソッドのバリエーションを提供します。

厳密に言えばabcabc:abc::はまったく異なり、互いに独立している可能性があります。しかし、それは非常に悪いスタイルになります。メソッドが多かれ少なかれ同じことを行い、それらの機能は、渡されるさまざまな値によって駆動される詳細が異なることはかなり一般的です。

于 2012-11-07T08:52:35.223 に答える
2

セレクターでは使用しloadDetailListViewControllerません。loadDetailListViewController:

于 2012-11-07T08:52:54.797 に答える