尝试比较web-service返回的字段,它只包含字符串true
或false
(YES,它是STRING而不是boolean),所以我尝试将它与另一个字符串进行比较像这样:
if ([withOptions isEqualToString:@"true"]) {
annotation.stationLavage=@"with";
}else {
annotation.stationLavage=@"without";
}
所以当withOptions
字符串包含“true”字符串时,一切正常,当它包含“false”字符串时,我在日志中得到了这个异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x2984d68'
我很确定在所有情况下,withOptions
都包含一个字符串值(“true”或“false”),它永远不会包含NULL。
答案 0 :(得分:3)
我很确定在所有情况下, withOptions包含字符串值 (“真”或“假”)和它 永远不会包含NULL。
显然,这种假设是错误的。 :)
在if()
语句之前的行上,添加NSLog(@"%@ - %@", withOptions, [withOptions class]);
不是NSNull
和NULL
不是一回事; NSNull
是一个类,其单例实例在容器(和其他东西)中表示“无值”,不接受nil
作为值。
发生崩溃时,withOptions
指的是NSNull
。
答案 1 :(得分:0)
这是我的代码,易于理解。
if ([[info objectForKey:@"address"] isKindOfClass:[NSNull class]]) {
dto.address = @"Unknown";
}
答案 2 :(得分:0)
如果你想做一个安全的比较而且你的“withOption”不是100%包含一个字符串,因为它可能是例如null(没有给出选项的情况)你可以这样做:
if ([@"true" isEqualToString:withAnnotation]) {
annotation.stationLavage=@"with";
}else {
annotation.stationLavage=@"without";
}
请注意,您甚至可以缩短比较数据:
annotation.stationLavage=[@"true" isEqualToString:withAnnotation]?@"with":@"without";