【发布时间】:2011-05-11 21:42:42
【问题描述】:
我遇到了这个异常的问题,实际上,当我单击 pin 的 calloutAccessoryControlTapped 按钮时,我得到了这个异常,我尝试通过控制台中的 NSLog 跟踪错误,我找到了唯一的 pin导致此异常的值为<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 Boulevard du Maréchal Juin
【问题讨论】:
-
由于 nil 不能存储在集合中,因此您的 NSDictionary 包含 NSNull 对象。登录后,他们会打印
<null>,所以这确实是问题发生的地方。您可以通过使用isEqual:而不是isEqualToString:来解决这个问题(它不在您发布的代码中)。 -
嗨,谢谢你的回答,实际上,我不明白为什么以及在哪里应该使用
isEqual:;谢谢 :) -
您应该使用
isEqual:,因为您的字典或数组包含一个 NSNull 对象。由于isEqualToString:仅由 NSString 类定义,因此您不能在 NSNull 实例上使用它。isEqual:是为所有对象定义的,在调用字符串时会自动调用isEqualToString:,因此使用起来很安全。查找您在数组或字典中的对象上使用isEqualToString:的任何位置,并将其更改为isEqual:。 -
嗨,我在我的代码上使用了两次
isEqualToString,与adress没有关系,但是,我将它替换为isEqual,我的问题仍然存在,我不明白为什么只有对于那个地址,它得到<null>? -
崩溃是否可能在 MyLocation
initWithName...方法中,或者您调用的其他方法中?我不能告诉你为什么你会得到<null>,除了你收藏的东西。如果您发布更多发生崩溃的代码,这可能会有所帮助。
标签: objective-c web-services ios json