因此,此代码基本上从服务器获取数据,创建图像,然后将其添加到视图中。
但是,我希望一次更新一个视图。
现在,在加载所有图像后,视图会立即更新。
我想在每次上传新图片时更新视图 - 这应该在addImage方法中发生,而是等待所有图像加载。
我尝试使用dispatch_async来解决这个问题,但它没有用。
那么如何一次加载一张图片?
AFJSONRequestOperation *operation =
[AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//some code not displayed here that parses the JSON
for (NSDictionary *image in images){
if ([[image objectForKey:@"ContentType"] isEqualToString:@"image/png"]){
NSString *imgLink = [[image objectForKey:@"MediaUrl"] JSONStringWithOptions:JKSerializeOptionPretty includeQuotes:NO error:nil];
NSURL *url = [NSURL URLWithString:path];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [[UIImage alloc] initWithData:data cache:NO]
dispatch_async(dispatch_get_main_queue(), ^{
[self addImage:img];
//This method adds the image to the view
});
}
}
}
更新:这不是一个tableview,图像作为子视图添加到UIView
答案 0 :(得分:0)
我相信你正在寻找一种延迟装载的形式。试试这个例子:Apple Lazy Loading example
答案 1 :(得分:0)
[NSData dataWithContentsOfURL:url];
是一个同步操作,所以你必须逐个等待每个图像,基于url的图片的正确延迟加载实现是最好的解决方案,同时你可以尝试做这样的事情
AFJSONRequestOperation *operation =
[AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//some code not displayed here that parses the JSON
for (NSDictionary *image in images){
if ([[image objectForKey:@"ContentType"] isEqualToString:@"image/png"]){
NSString *imgLink = [[image objectForKey:@"MediaUrl"] JSONStringWithOptions:JKSerializeOptionPretty includeQuotes:NO error:nil];
NSURL *url = [NSURL URLWithString:path];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img = [[UIImage alloc] initWithData:data cache:NO]
dispatch_async(dispatch_get_main_queue(), ^{
[self addImage:img];
//This method adds the image to the view
});
})
}
}
}
如果您想使用此解决方案,建议您创建自己的并发队列,而不是使用global_queue