Если это данные, созданные за пределами вашей программы, вы всегда должны проверять типы.
-(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
}
}