下面是一个代码块,它在我应用程序主线程的一个单独的线程中运行。如何在每个按钮获取缩略图后更新UI?现在它不会更新,直到整个方法完成。这些按钮已添加到UIScrollView。
(LotsGridButton只是一个带有一些额外属性的UIButton。)
- (void)fetchThumbnails {
CCServer* server = [[CCServer alloc] init];
for (int i=0; i<[buttons count]; i++) {
LotsGridButton* button = [buttons objectAtIndex:i];
if (button.lot.thumbnail) continue;
// load the thumbnail image from the server
button.lot.thumbnail = [server imageWithPath:button.lot.thumbnailURL];
[button setImage:button.lot.thumbnail forState:UIControlStateNormal];
}
[server release];
}
答案 0 :(得分:5)
代替setImage:forState:
,请查看performSelectorOnMainThread:
方法,例如:
[myButton performSelectorOnMainThread:@selector(setThumbnail:) withObject:[server imageWithPath:myButton.lot.thumbnailURL] waitUntilDone:NO];
答案 1 :(得分:3)
我没有使用iPhone的经验,但在Cocoa中,你通常只能从主线程更新UI。
从另一个线程,你可以使用NSObject的代码在主线程中执行代码:
performSelectorOnMainThread:withObject:waitUntilDone: