3

我必须遵循来自服务器的 JSON 响应:

   {
  "theSet": [

  ],
  "Identifikation": 1,
  "Name": "Casper",
  "Adress": "Lovis 23",
  "Location": "At home",
  "Information": "The first, the second and the third",
  "Thumbnail": "none",
 }

我正在检索数据,如下所示:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSLog(@"connectionDidFinishLoading");

    NSLog(@"Succeeded! Received %d bytes of data",[data length]);

    NSError *myError = nil;

     NSDictionary *res = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&myError];

      news = [NSArray arrayWithObjects:[res allKeys], [res allValues], nil];

      NSLog(@"%@", news);

    //[mainTableView reloadData];
}

然后我想将所有 JSON 数据插入到一个数组中,这样我就可以在我的 tableview 中显示数据。

我的表格视图代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];

    if(cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MainCell"];
    }

    cell.textLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"Name"];
    cell.detailTextLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"Adress"];

    return cell;
}

但是我的应用程序因错误而崩溃:

-[__NSArrayI objectForKey:]: unrecognized selector sent to instance. 

如何将 JSON 对象插入 NSArray,以便在我的 tableview 中显示它?

4

3 回答 3

2

编辑:

我再次查看了您的代码,我之前的回答是错误的。

生成时news,您将 2 个NSArray对象放入其中。第一个包含所有键,第二个包含 JSON 中的所有值。

为了在 JSON 中显示每个对象的名称,您应该简单地做

news = [res allKeys];
jsonResult = res;

// 如果您想使用这些值,请存储您的 json!

请注意,它们将是无序的。在您的手机上,您可以执行以下操作:

NSString *key = [news objectAtIndex:indexPath.row];
cell.textLabel.text = key;

id object = [jsonResult valueForKey:key];
cell.detailTextLabel.text = // do something depending on your json type which can have different values
于 2012-12-20T12:31:37.937 回答
0

你遇到的错误

[__NSArrayI objectForKey:]: unrecognized selector sent to instance.

告诉你你需要知道的一切。

这说不NSArray明白objectForKey。如果您阅读 Apple 提供的文档,您将看到这一点。

你的代码

cell.textLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"Name"];

期望newsNSArray 返回一个响应的对象objectForKey- 很可能是一个NSDictionary. 您用于提取 JSON 数据的代码

NSDictionary *res = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&myError];
news = [NSArray arrayWithObjects:[res allKeys], [res allValues], nil];

只是获取所有字典并将键提取到数组中。

您需要查看这些代码行 - 这就是您出错的地方。

查看NSJSONSerialization 参考及其链接的相关示例代码。

于 2012-12-20T12:32:20.157 回答
0

我自己找到了一个简单的解决方案,更适合我的项目:

我刚刚做了以下事情:

    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:data options:0 error:&myError];

NSArray news = [NSArray arrayWithObject:res];

并且我可以使用以下代码在我的表格视图中显示 JSON 内容。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];

    if(cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MainCell"];
    }


    cell.textLabel.text = [[news objectAtIndex:indexPath.row] valueForKey:@"name"];

    cell.detailTextLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"Location"];

    return cell;
}
于 2012-12-20T15:02:44.470 回答