0

いくつかのリンクをストリーミングするオーディオプレーヤーがあり、JSONを介してリンクをtableViewにロードしたいと考えています。

リンクを表示する私のtableViewは次のとおりです:(コメントアウトされていますが、jsonなしで動作します)

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

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

    int row = indexPath.row;

    [[cell textLabel] setText:[_radioNames objectAtIndex:row]];
    [[cell detailTextLabel] setText:[_radioSubtitles objectAtIndex:row]];
    if(row == _currentRadio) {
        [cell setAccessoryView:[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"now_playing.png"]] autorelease]];
    } else {
        [cell setAccessoryView:nil];
    }


    return cell;
}
 */

ここで、JSONファイルを取得します。

// Download JSON
    NSString *jsonString = [NSString
                            stringWithContentsOfURL:[NSURL URLWithString:@"http://www.xxxxxxxxx/radioliste.json"]
                            encoding:NSStringEncodingConversionAllowLossy
                            error:nil];
    // Create parser
    SBJSON *parser = [[SBJSON alloc] init];
    NSDictionary *results = [parser objectWithString:jsonString error:nil];
    [parser release], parser = nil;
    // Set tableData
    [self setTableData:[results objectForKey:@"items"]];

    NSLog(jsonString); // THIS IS SHOWING ME THE WHOLE JSON FILE, DON'T KNOW IF THAT OK?

これがJSONデータリストです:(またはそう思います)

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        // Change UITableViewCellStyle
        cell = [[[UITableViewCell alloc]
                 initWithStyle:UITableViewCellStyleSubtitle
                 reuseIdentifier:CellIdentifier] autorelease];
    }

    // Get item from tableData
    NSDictionary *item = [tableData objectAtIndex:[indexPath row]];
    // Set text on textLabel
    [[cell textLabel] setText:[item objectForKey:@"title"]];
    // Set text on detailTextLabel
    [[cell detailTextLabel] setText:[item objectForKey:@"description"]];

    return cell;
}

これが私のJSONファイルです:

{
    "radioliste": {
    "items": [
        {
            "id": "The Voice",
            "string": "Afspil The Voice",
            "string": "LINK"
        }
    ]
    }
}

だからここに私の質問があります...JSONファイルから正しいストリーミングリンクをロードしてtableViewに解析するにはどうすればよいですか?そして、JSONファイルは有効ですか?

4

2 に答える 2

1

次のようなネイティブJSONライブラリを使用するのはどうですか。

NSData* data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil];

NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:(__bridge NSData *)data options:NSJSONReadingMutableContainers error:nil];

SBJSONの代わりに?

編集:JSONに問題があることに気づきました。辞書に重複するキーがあります:文字列。

于 2012-12-21T23:28:53.180 に答える
1

まず、initWithContentsOfURLを使用しないでください...これはブロッキング呼び出しであり、アプリがフリーズします。非同期モードでNSURLConnectionを使用して、ネットワークからデータを取得します。

第二に、NSJSONSerializationはiOS5から利用可能です。それを使用してください。

したがって、NSURLConnectionはNSDataを構築します。NSJSONSerialization JSONObjectWithData:そのNSDataをオブジェクトに変換します。あなたの場合、それはNSDictionaryになります。

貼り付けたJSONファイルが、cellForRowAtIndexPathで使用しているオブジェクトキー名と一致しません。最初の項目の2つのキーが「文字列」であるため、どうなるかわかりません。ただし、タイトルと説明を意味しているとすると、次のようなものを使用できます。

cell.textLabel.text = tableData[@"items"][indexPath.row][@"title"];

タイトルをテーブルセルに入れます。

于 2012-12-21T23:31:56.860 に答える