3

所以我正在解析一个推特时间线。JSON 响应中有一个名为“following”的字段。它应该是真或假。

但有时该字段丢失。

当我做:

NSLog(@"%@", [[[timeline objectAtIndex:i] objectForKey:@"user"] objectForKey:@"following"]);

这是输出:

1
1
0
0
1
<null>
1
1

那么如何检查这些值呢?

4

4 回答 4

13

NSArray并且其他集合不能nil作为值,因为 nil 是集合结束时的“哨兵值”。您可以使用以下方法查找对象是否为空:

if (myObject == [NSNull null]) {
    // do something because the object is null
}
于 2012-04-09T17:48:59.463 回答
3

如果该字段缺失,NSDictionary -objectForKey: 将返回一个 nil 指针。您可以像这样测试 nil 指针:

NSNumber *following = [[[timeline objectAtIndex:i] objectForKey:@"user"] objectForKey:@"following"];

if (following)
{
    NSLog(@"%@", following);
}
else
{
    // handle no following field
    NSLog(@"No following field");
}
于 2012-04-09T17:50:24.437 回答
-1

不是时间轴元素为空。它要么是“用户”字典,要么是为空的“关注”对象。我建议创建一个用户模型类来封装一些 json/字典的混乱。事实上,我敢打赌,你可以找到适用于 iOS 的开源 Twitter API。

无论哪种方式,您的代码都将更具可读性,例如:

TwitterResponse *response = [[TwitterResponse alloc] initWithDictionary:[timeline objectAtIndex:i]];
NSLog(@"%@", response.user.following);

TwitterResponse上面将实现一个只读属性TwitterUser *user,该属性又将实现NSNumber *following. 使用NSNumber是因为它允许空值(JSON 响应中的空字符串)。

希望这可以帮助您走上正轨。祝你好运!

于 2012-04-09T18:07:41.683 回答
-1

要检查数组是否包含空值,请使用此代码。

if ([array objectAtIndex:0] == [NSNull null])
{
//do something
}
else
{
}
于 2013-06-26T06:38:05.130 回答