在ios中触摸屏幕之前,UI不会更新

时间:2015-03-10 13:09:31

标签: ios iphone asynchronous grand-central-dispatch

在我的ios应用程序中我使用GCD调用在后台线程中下载一些数据,但它没有立即更新UI,我应该触摸屏幕来更新UI,以下是我的代码,我是否知道为什么表视图没有重新加载虽然我想在主线程中更新

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //background processing goes here
         // Downloading JSON data from Web APIs
        dispatch_async(dispatch_get_main_queue(), ^{
                //update UI here

                //Reloading my table view
                 [objTableView reloadData];
        });
});

我也尝试过runOnMainQueueWithoutDeadlocking代替dispatch_async(dispatch_get_main_queue(),但没有用{/ p>

void runOnMainQueueWithoutDeadlocking(void (^block)(void))
{
    if ([NSThread isMainThread])
    {
        block();
    }
    else
    {
        dispatch_sync(dispatch_get_main_queue(), block);
    }
}

2 个答案:

答案 0 :(得分:1)

在用户决定更改问题代码之前给出答案

根据Apple Documentation for UITableView,没有名为reload的方法应该是reloadData。因此,您需要根据Apple Documentation around UITableView reloadData:将行[objTableView reload];更改为[objTableView reloadData];。另外,如果您结帐How to Reload a UITableView While I am Looking at ItReload data of UITableView in background,也可以说[objTableView reloadData];

答案 1 :(得分:0)

尝试放

yourtableviewdelegate.layoutIfNeeded() 

重新加载tableview后。