0

JSONデータをTableViewに取り込むアプリに取り組んでいます。しかし、JSON 操作のコードが開始された瞬間、アプリは SIGABRT エラーでクラッシュします。以下は、私が使用しているコードです (もちろん、セキュリティ上の理由から実際の URL は差し引いています)。

// START - CONNECT TO JSON FILE ON SERVER AND DOWNLOAD INFORMATION
- (void)fetchTags
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL:
                        [NSURL URLWithString: @"URL goes here..."]];

        NSError* error;
        //tags = how many objects there are in the JSON file containing data
        tags = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions
                                                   error:&error];

NSDictionary *tagz = [NSJSONSerialization JSONObjectWithData:データ オプション:kNilOptions エラー:&エラー];

    tags = [tagz objectForKey:@"name"];

        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
    });
}
// END - CONNECT TO JSON FILE ON SERVER AND DOWNLOAD INFORMATION

//START - NUMBER OF ROWS TO GENERATE
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return tags.count;
}
//END - NUMBER OF ROWS TO GENERATE


// START - PULL IN INFORMATION FROM JSON AND DISPLAY IN CELLS
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TagCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    NSDictionary *tag = [tags objectAtIndex:indexPath.row];
    NSString *name = [tag objectForKey:@"name"];

        if ([tag objectForKey:@"name"] != NULL)

    cell.textLabel.text = name;

    return cell;
    }
// END - PULL IN INFORMATION FROM JSON AND DISPLAY IN CELLS

URL が指す JSON データは次のとおりです。 "\u5909\u66f4\u5c65\u6b74\u30c6\u30b9\u30c8"}, {"projid": 2011101401, "名前": "20111014-01"}, {"projid": 201111001, "名前": "\u5c3e \u7530\u90b8\u30ea\u30d5\u30a9\u30fc\u30e0" }]、"オプション 1": ""}

クラッシュ時に返される完全なエラーは次のとおりです。 2141:707] *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[__NSCFDictionary objectAtIndex:]: 認識されないセレクターがインスタンス 0x16f750 に送信されました'

誰かが私が間違っていることを見つけたり、役立つチュートリアルを参照したりできますか?

前もって感謝します!

編集: (void)fetchTags に配置された次のコードはクラッシュを修正しましたが、データがセルに取り込まれていないため、まだ問題があります:

    NSDictionary *tagz = [NSJSONSerialization JSONObjectWithData:data
                                                         options:kNilOptions
                                                           error:&error];

    tags = [tagz objectForKey:@"name"];
4

1 に答える 1

0

私はそれが であるはずの 、または のtagsいずれかであると確信しています。NSArrayNSMutableArrayNSDictionary

アプリがクラッシュしている理由は、[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];NSDictionary オブジェクトを返しNSDictionary、メソッドがないためobjectAtIndex:、例外がトリガーされるためです。

次のようなことができます。

NSDictionary *tagz = [NSJSONSerialization JSONObjectWithData:data
                                                 options:kNilOptions
                                                   error:&error];

tags = [tagz objectForKey:@"name"];
于 2012-08-18T18:14:31.873 に答える