AFJSONRequestOperation不更新块之外的内容

时间:2013-06-05 04:34:51

标签: ios json afnetworking afjsonrequestoperation

我正在尝试使用AFJSONRequestOperation从JSON Feed中提取一个数据和平。

以下代码将url拉得很好,当打印stringURL时,它会打印正确的url。但是,我尝试了几种不同的方法将url分配给一个新的变量,超出了块的范围。我是否尝试将生成的URL分配给另一个全局NSURL(确保使用__block)或尝试将其添加到数组中,它似乎无法及时更新以在NSLog中打印出来。我怀疑这是因为操作还没有完成。在致电NSLog([streamUrls objectAtIndex:0]);之前,如何确保操作已完成?

这是我正在使用的代码。

    NSURL *url = [contentUrls objectAtIndex:indexPath.row];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSONSound) {

    NSString *stringURL = [NSString stringWithFormat:@"%@",
                           JSONSound[@"stream_url"], nil];

    NSURL *streamURL = [NSURL URLWithString:stringURL];
    NSLog(stringURL);
    [streamUrls addObject:streamURL];
    [self.collectionView reloadData];
} failure:nil];
[operation start];

NSLog([streamUrls objectAtIndex:0]);

编辑:[self.collectionView reloadData];此行似乎不会影响这种情况。

1 个答案:

答案 0 :(得分:3)

为了确保在对代码进行任何调用之前操作已完成,您可以使用AFJSONRequestOperation的成功块,这是您在将对象添加到streamUrls时所执行的操作:

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSONSound) {
    NSString *stringURL = [NSString stringWithFormat:@"%@",
                       JSONSound[@"stream_url"], nil];

    NSURL *streamURL = [NSURL URLWithString:stringURL];
    NSLog(stringURL);
    [streamUrls addObject:streamURL];
    [self.collectionView reloadData];
    NSLog([streamUrls objectAtIndex:0]);
} failure:nil];

reloadData不会影响数据源。它只是刷新基于数据源显示的集合视图(数据源是否更新)。