我有多个按钮,我希望每个按钮都有一个来自网址的图片。 我试图做什么,它没有工作(按钮没有图像)。如果我在没有派遣的情况下尝试做同样的事情,那么它可以工作但是需要时间。我哪里错了?
UIImageView *imageView = [[UIImageView alloc] init];
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add code here to do background processing
NSString *imageURL = pictureUrl[i];
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]];
imageView.image = [UIImage imageWithData:imageData];
[bt setBackgroundImage:imageView.image forState:UIControlStateNormal];
//
dispatch_async( dispatch_get_main_queue(), ^{
});
});
答案 0 :(得分:3)
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Add code here to do background processing
NSString *imageURL = pictureUrl[i];
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]];
UIImage *image = [UIImage imageWithData:imageData];
dispatch_async(dispatch_get_main_queue(), ^{
[bt setBackgroundImage:image forState:UIControlStateNormal];
});
});
您在后台执行所有操作,然后在主线程上不执行任何操作。而是在后台下载数据并在主线程上使用UI。也无需拥有imageView
答案 1 :(得分:2)
您报告imageData
为nil
:
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]
如果是这种情况,您应首先检查NSURL
对象是否为nil
:
NSURL *URL = [NSURL URLWithString:imageURL];
NSLog(@"URL = %@", URL);
NSData *imageData = [NSData dataWithContentsOfURL:URL];
网址可能看起来不错,但只有通过查看NSURL
值才能确认。
如果您似乎坚持,网址很好(并且您已确认NSURL
不是nil
),但NSData
是仍然会出现nil
,那么你应该使用一种不同的检索机制,一种返回NSError
解释失败的原因。例如,您可以通过调用dispatch_async
将此sendAsynchronousRequest
替换为背景,如果NSData
为nil
,则查看NSError
对象。
此时可能不用说,但请确保将UI控件的所有更新(例如图像视图)分派回主队列。