2012-02-07 53 views
1

在我的iOS5應用程序中,我有UITableView,它將顯示基於存儲在progressLabelArray中的NSString值的單元格。我已經從我的底層註冊了一個回調函數,並且我通過一個C函數接收它們,從那裏我通過引用self來調用UI更新方法。在每個回調中刷新/重新載入UITableView

static void callback_handler(int nCode) { 
     [refToSelf updateProgressView:nCode]; 
    } 


    -(void) updateProgressView:(int32_t) nCode 
    { 
     NSString *status = nil; 
     status = [self progressUpdateToString:nCode]; 
     [self.progressLabelArray insertObject:status atIndex:0]; 
     [self.progressTableView reloadData]; 
     [self.progressTableView setNeedsDisplay]; 
    } 

我猜,因爲回調是相同的(UI線程)就快到了,可能不需要performSelectorOnMainThread。

我的問題是,只有在整個操作完成時刷新表視圖,顯示最後一次回調值。有沒有辦法在每次回調後強制UI刷新?回調可能會相對較快。

+1

如果再打來了太快,那麼你將如何觀察數據的變化,即爲什麼只有最後一個變化是可見的 – 2012-02-07 11:27:12

+0

首先,它們不會太快以至於不被注意,然後當我在各種回調之後進行調試和休息時,我只能看到View上的初始值。 – 2012-02-07 16:10:31

+0

仍然無法解決問題。請親愛的iOS朋友 - 幫助!!! – 2012-02-10 10:56:43

回答

0

通過在單獨的線程中運行進度代碼解決了該問題。回調來一個單獨的線程,並在那裏我更新我的主線程(UI線程)。我猜UI線程沒有得到更新UI的任何週期。

0

把你

tableView.reloadData()

撥打以下塊和你的tableview將刷新沒有任何問題,而無需刷新卷軸狀實時應用。

的SWIFT 3:

DispatchQueue.main.async() 
{ 
    tableView.reloadData() 
} 

客觀C:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // Background work 
    [tableView reloadData]; 

});