我得到了一个像下面的Json作为回复消息。
data:{
type = DATA;
version = "4.51";
}
我在下面的方法中进行处理,从调试器看起来那个版本号是字符串。
-(void)processResponse:(NSDictionary *)responseDictionary{
NSString *version = [responseDictionary valueForKey:@"version"];
if([version isEqualToString:@"4.51"]){ //line 3
NSLog(@"do something"); //crashes
}
}
但第3行崩溃了。我的问题是为什么这条线崩溃了?处理这种类型的字典消息的最佳方法是什么?
如果这是源自程序之外的数据,则必须始终检查类型。
-(void)processResponse:(NSDictionary *)responseDictionary {
id value = responseDictionary[@"version"];
if ([value isKindOfClass: [NSString class]]) {
NSString *version = value;
if ([version isEqualToString: @"4.51"]) {
NSLog(@"do something"); //crashes
}
}
}
如果这就是你要做的全部,那么你可以用&&
短路来缩短它,如果你小心的话。
-(void)processResponse:(NSDictionary *)responseDictionary {
NSString *version = responseDictionary[@"version"];
if ([version isKindOfClass: [NSString class]]
&& [version isEqualToString: @"4.51"]) {
NSLog(@"do something"); //crashes
}
}
只是要非常小心,因为这意味着version
存在于这个if
块之外,可能不是正确的类型。
同样,如果这正是你的问题,你也可以通过使用适用于所有isEqual:
的NSObject
来简化它:
-(void)processResponse:(NSDictionary *)responseDictionary {
id version = responseDictionary[@"version"];
if ([version isEqual: @"4.51"]) {
NSLog(@"do something"); //crashes
}
}