1

几天来我一直被一个问题困扰。我搜索了互联网并找到了很多答案,但似乎没有任何效果 - 我可能不知道如何修改自己的代码。

我有一个 JSON 连接,我制作了一个字典。当我没有多级字典时,这一切都很好,但只要我有:

{
  "Table": [
    {
      "MENUID": 1072.0,
      "MENUDESC": "HOME           ",
      "PARENTMENUID": null,
      "NAVIGATETO": "content.aspx?item=1072&pid=0",
      "NAVIGATETO2": "default.aspx?item=1072&pid=0",
      "PROTECTED": null,
      "parentmenuid2": null
    },
    {
      "MENUID": 1073.0,
      "MENUDESC": "PRODUCTS & SERVICES",
      "PARENTMENUID": null,
      "NAVIGATETO": "#",
      "NAVIGATETO2": "default.aspx?item=1073&pid=0",
      "PROTECTED": null,
      "parentmenuid2": null
    }
  ]
}

我调整我的代码如下:

- (void)fetchTweets
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL: 
                        [NSURL URLWithString: @"http://adhoc.nyxtek.co.za/spfjsonws/default2.aspx"]];

        NSError* error;

        menuItems = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions 
                                                   error:&error];
        NSArray * allKeys = [menuItems allKeys];
        NSLog(@"Count : %d", [allKeys count]);


        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    });
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return menuItems.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TweetCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    NSDictionary *tweet = (NSDictionary *)[menuItems objectForKey:@"Table"];

    NSArray * allKeys = [tweet allKeys];
    NSLog(@"Count : %d", [allKeys count]);


    //NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
    NSString *text = [tweet objectForKey:@"MENUDESC"];
    NSString *name = [tweet objectForKey:@"MENUID"];

    cell.textLabel.text = text;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];

    return cell;
}

具体来说,这行代码不起作用:

NSDictionary *tweet = (NSDictionary *)[menuItems objectForKey:@"Table"];

我对外部字典的第一个计数是 1,这是正确的,但是我对上面新字典的第二个计数是 0,这是错误的。

当我了解研究的重要性时,我已经从研究以前的问题中应用了其中的大部分内容,但我似乎仍然无法找到具体的错误。

任何援助将不胜感激。

4

1 回答 1

2

Table是一个数组(字典):

"Table": [
...
]

所以代码应该是:

NSArray *tweet = (NSArray *)[menuItems objectForKey:@"Table"];
于 2013-02-28T16:12:04.790 回答