我正试图使用AFJSONRequestOperation
从JSON提要中提取一个和平的数据。
下面的代码可以很好地提取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];
这一行似乎不影响情况。
为了确保在对代码进行任何调用之前操作已经完成,您可以使用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不影响数据源。它只是刷新基于数据源显示的集合视图(无论数据源是否更新)。