如何正确检查URL请求中的数据?

时间:2015-12-02 13:59:53

标签: objective-c arrays integer nsdictionary

我从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"是不是一个整数?

现在如何检查?我想这不是检查它是否是字符串值的好方法,不是吗?

1 个答案:

答案 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]

执行相同的操作