我从URL请求中捕获了一些数据。 通常它必须是存储在数据库中的整数值。 所以我得到了以下代码:
if ([[sourceDict objectForKey:@"fields"] objectForKey:@"id"]) {
if ([[[sourceDict objectForKey:@"fields"] objectForKey:@"id"] isKindOfClass:[NSArray class]]) {
if ([[sourceDict objectForKey:@"fields"] objectForKey:@"id"] > 0) {
self.id = [[[[sourceDict objectForKey:@"fields"] objectForKey:@"id"] objectAtIndex:0] intValue];
}
} else {
self.id = [[[sourceDict objectForKey:@"fields"] objectForKey:@"id"] intValue];
}
}
现在的问题是有人提出了一些其他价值,例如:还有来自URL请求的字符串而非整数到该数据库字段。
因此,应用程序崩溃了,因为objectForKey:@" id"是不是一个整数?
现在如何检查?我想这不是检查它是否是字符串值的好方法,不是吗?
答案 0 :(得分:1)
是的,对json或类似的输入数据进行类型检查是一个很好的做法。
使用[someObject isKindOfClass:[AClass class]]
e.g。 [[sourceDict objectForKey:@"fields"] objectForKey:@"id"] isKindOfClass:[NSArray class]]
所以你已经这样做并检查对象是否是NSArray
类型(或其任何子类)。您可以使用NSNumber
和[[[sourceDict objectForKey:@"fields"] objectForKey:@"id"] objectAtIndex:0]
或[[[sourceDict objectForKey:@"fields"] objectForKey:@"id"] intValue]