我已经实现了calloutAccessoryControlTapped
这样的:
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
calloutAccessoryControlTapped:(UIControl *)control
{
NSLog(@"calloutAccessoryControlTapped: annotation = %@", view.annotation.title);
if([_delegate respondsToSelector:@selector(mapView:didClickPinButton:)])
{
NSString *titleStr = [(DisplayMap *)view.annotation title];
[_delegate performSelector:@selector(mapView:didClickPinButton:)withObject:titleStr];
}
}
当我单击大头针的按钮时,它转到mapView:didClickPinButton
主视图控制器上的方法并显示错误:
线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x ......)
这是mapView:didClickPinButton:
方法:
- (void) mapView: (MapView *) mapView didClickPinButton:(NSString *) title
{
NSLog(@"bsn name-->%@",title);
for(int i=0;i<[self.categoryListArray count];i++)
{
NSMutableDictionary *couponDetail = [self.categoryListArray objectAtIndex:i];
if([[couponDetail objectForKey:@"category_name"] isEqualToString:title])
{
NSNumber *coupon_type=[couponDetail objectForKey:@"coupon_type"];
int c_type = [coupon_type intValue];
if(c_type == 1)
{
[self callServiceForCouponTypeOneBlock:[couponDetail objectForKey:@"id"] ];
break;
}
else if(c_type == 2)
{
BusinessViewController *businessVC = [[BusinessViewController alloc]initWithNibName:@"BusinessViewController" bundle:nil];
[businessVC setCouponListDetail:couponDetail];
[self.navigationController pushViewController:businessVC animated:YES];
break;
}
}
}
问题是这一行:
[_delegate performSelector:@selector(mapView:didClickPinButton:)withObject:titleStr];
该performSelector:withObject:
方法只能用于调用具有一个对象参数的方法,而您的mapView:didClickPinButton:
方法具有两个对象参数。
您可以改用performSelector:withObject:withObject:
which来调用带有两个对象参数的方法,如下所示:
[_delegate performSelector:@selector(mapView:didClickPinButton:)
withObject:mapView withObject:titleStr];
但是,performSelector
似乎并没有必要使用这里。
直接在委托上调用方法要容易得多,所以方法有多少个参数都无关紧要:
[_delegate mapView:mapView didClickPinButton:titleStr];
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句