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 ですが、新しい上記のディクショナリの 2 番目のカウントは 0 で、これは間違っています。

研究の重要性を理解しているので、以前の質問の研究からこれの多くを適用しましたが、まだ特定の欠点を見つけることができないようです.

任意の支援をいただければ幸いです。

4

1 に答える 1

2

Table(辞書の)配列です:

"Table": [
...
]

したがって、コードは次のようになります。

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