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

首先,不要使用 initWithContentsOfURL... 这是一个阻塞调用,会冻结您的应用程序。在异步模式下使用 NSURLConnection 从网络中获取数据。

其次,NSJSONSerialization 从 iOS 5 开始就可用。使用它。

所以,NSURLConnection 会建立一个 NSData。NSJSONSerialization JSONObjectWithData: 将把 NSData 变成一个对象。在您的情况下,它将是一个 NSDictionary。

您粘贴的 JSON 文件与您在 cellForRowAtIndexPath 中使用的对象键名称不匹配。我不确定会发生什么,因为第一项中的两个键是“字符串”。但假设你的意思是标题和描述,你可以使用类似的东西:

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

将标题放入表格单元格中。

于 2012-12-21T23:31:56.860 回答
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 回答