如何在Web服务中获取特定对象

时间:2014-03-11 00:40:19

标签: ios objective-c web-services unrecognized-selector

我正在使用GitHub Job网络服务。以下是该服务的链接:https://jobs.github.com/api

现在我可以检索特定网址中的所有数据,例如:

@"http://jobs.github.com/positions.json?description=python&location=new+york"    

我可以使用以下代码获取所有json数据:

- (void)viewDidLoad
{
[super viewDidLoad];

NSString *urlString = @"http://jobs.github.com/positions.json?description=python&location=new+york";

NSURL *url = [NSURL URLWithString:urlString];

NSData *data = [NSData dataWithContentsOfURL:url];

NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

NSLog(@"%@", json);

// Do any additional setup after loading the view.

}

现在这很好,但是当我尝试这样做时:

 NSArray *items = [[NSArray alloc] init];
items = json[@"description"];
NSLog(@"%@", items);

我收到了SIGABRT,我收到的错误如下:

JobSearch [1249:70b] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFArray objectForKeyedSubscript:]:无法识别的选择器发送到实例0x8a82930'

我很困惑,因为我使用过的所有其他网络服务我都可以做这样的事情,“描述”应该是我应该能够抓住的项目。我似乎没有得到任何地方......

所有的帮助都表示赞赏,提前谢谢。

1 个答案:

答案 0 :(得分:0)

首先它对你的数组alloc/init没有意义,因为你用下一行立即覆盖它

NSArray *items = [[NSArray alloc] init];
items = json[@"description"];

此外,JSONObjectWithData返回类型为id的对象,但您将其分配给NSDictionary,这是一个被证明是错误的假设。

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

显然该方法返回一个数组,因此调用json[@"description"]无效。您可以尝试使用它:

NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSString item = [json objectAtIndex:0];  // grab item from array

如果没有保证,它将起作用。我建议首先检查返回的对象类型,可能是isKindOfClass,看看它是NSDictionary还是数组。