[英]Updating UI components from an async callback (dispatch_queue)
如何使用隊列中的值更新GUI元素? 如果我使用異步隊列構造,textlable不會更新。 這是我使用的代碼示例:
- (IBAction)dbSizeButton:(id)sender {
dispatch_queue_t getDbSize = dispatch_queue_create("getDbSize", NULL);
dispatch_async(getDbSize, ^(void)
{
[_dbsizeLable setText:[dbmanager getDbSize]];
});
dispatch_release(getDbSize);
}
謝謝。
正如@MarkGranoff所說,所有UI都需要在主線程上處理。 你可以用performSelectorOnMainThread來做,但是使用GCD它會是這樣的:
- (IBAction)dbSizeButton:(id)sender {
dispatch_queue_t getDbSize = dispatch_queue_create("getDbSize", NULL);
dispatch_queue_t main = dispatch_get_main_queue();
dispatch_async(getDbSize, ^(void)
{
dispatch_async(main, ^{
[_dbsizeLable setText:[dbmanager getDbSize]];
});
});
// release
}
必須在主線程上執行任何UI更新。 因此,您的代碼需要修改才能使用主調度隊列,而不是您自己創建的隊列。 或者,任何performSelectorOnMainThread
方法也可以。 (但是GCD是最好的選擇,這些天來!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.