exception:无法识别的select器,当我点击calloutAccessoryControlTapped

实际上,当我点击引脚的calloutAccessoryControlTappedbutton时,我得到了这个exception,我试着跟踪在控制台中的NSLog的错误,我发现唯一的引脚导致这个exception有价值<null> ,我通过一些代码解释:

 for (int i=0; i<[array count]; i++) { NSDictionary *stationEnCours=[array objectAtIndex:i]; location2D = (CLLocationCoordinate2D){ .latitude = lat, .longitude = lng }; MyLocation *annotation=[[[MyLocation alloc]initWithName:ensStation distanceVersLaStation:distance coordinate:location2D]autorelease]; //here we set the properties before we get call to addAnnotation annotation.stationAdress=[stationEnCours objectForKey:@"ssiphone_adresse"]; NSLog(@"%@",annotation.stationAdress); [mapView addAnnotation:annotation]; } 

我有4个站,在控制台我得到这个:

 2011-05-11 22:27:11.768 TopStation[2370:207] A 51 - Aire de la Champouse 2011-05-11 22:27:11.769 TopStation[2370:207] <null> 2011-05-11 22:27:11.769 TopStation[2370:207] 467 Avenue Henri Mauriat 2011-05-11 22:27:11.769 TopStation[2370:207] Route de Berre - Jas de Bouffan 

第二个是后来当我尝试点击其calloutAccessoryControlTapped导致问题,所以我检查了我的数据库,它的地址是一个string ,它不为null 。 我有点困惑,为什么这个exception,虽然所有检索为String ? 我也试图做同样的工作,但在服务器端,一切都好,它不显示我NULL ,只在iPhone端和这个站。 如果这有帮助,造成问题的车站的地址是: 1 Boulevard duMaréchalJuin

在你的代码中的某个时刻,你要么调用isEqualToString:在你认为是NSString的对象上,但实际上是NSNull,或者(更可能)你正在传递一个NSNull到某个类的方法/属性, 。 例如,您可能正在使用annotation.stationAdress的值设置UILabel的text属性。

你通常应该只使用NSNull,你不能使用nil ,例如在一个NSArray,NSDictionary或类似的。 从集合中提取可能的NSNull值之后,应该包含这样的语句将其转换回nil:

  if (value == [NSNull null]) value = nil; 

在使用tableviews时要小心,并确保将数据(数组)传递给tableview数据源和委托方法。