异常[NSNull isEqualToString:]:当我点击calloutAccessoryControlTapped时无法识别的选择器

时间:2011-05-11 21:42:43

标签: objective-c web-services ios json

我遇到了这个例外的问题,实际上,当我点击针脚的calloutAccessoryControlTapped按钮时我得到了这个例外,我试图通过控制台中的NSLog跟踪错误发现导致此异常的唯一引脚具有值<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。 我很困惑,为什么这个例外虽然都被检索为String ??我也试过做同样的工作,但在服务器端,一切都没问题,它不显示我NULL,只在iPhone方面和本站。 如果这个帮助,问题的站的地址是: 1 BoulevardduMaréchalJuin

2 个答案:

答案 0 :(得分:14)

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

您通常只能在不能使用nil的情况下使用NSNull,例如在NSArray,NSDictionary等中。从集合中提取可能的NSNull值后,您应该包含这样的语句将其转换回nil:

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

答案 1 :(得分:0)

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