2011-05-22 65 views
1

我有一個表格視圖,它是從一個抓取結果控制器填充的。我還使用NSTimer每分鐘進行一次API調用,以吸引所有要顯示的新數據。這發生在GCD和新的託管對象上下文異步使用,並使用mergeChangesFromContextDidSaveNotification在完成時將更改合併到主管理對象上下文中。這會觸發獲取的結果控制器委託方法,並且任何新行都將通過insertRowsAtIndexPaths插入表中。UITableView insertRowsAtIndexPaths導致應用程序無響應

這是所有預期的工作,但我看到UITableView endUpdates被調用和出現在表視圖中的新單元之間的5秒暫停。在這段暫停期間,應用程序不會響應任何觸摸事件(標籤欄,滾動表格視圖等)。

我對從哪裏開始調試這個問題有點困惑 - 單元配置都在endUpdates調用之前發生,而且似乎不需要很長時間。

該代碼相當複雜,但如果需要,我可以發佈它。

編輯

這裏是從上下文每次通話的時間日誌提取物合併endUpdates被稱爲:

2011-05-22 15:29:47.119 myapp[4136:7c1b] got background save notification 
2011-05-22 15:29:47.124 myapp[4136:7c1b] controllerWillChangeContent 
2011-05-22 15:29:47.128 myapp[4136:7c1b] NSFetchedResultsChangeInsert 
2011-05-22 15:29:47.132 myapp[4136:7c1b] controllerDidChangeContent 
2011-05-22 15:29:47.138 myapp[4136:7c1b] numberOfSectionsInTableView called 
2011-05-22 15:29:47.140 myapp[4136:7c1b] numberOfSectionsInTableView called 
2011-05-22 15:29:47.144 myapp[4136:7c1b] numberOfRowsInSection called 
2011-05-22 15:29:47.157 myapp[4136:7c1b] cellForRowAtIndexPath called 
2011-05-22 15:29:47.195 myapp[4136:7c1b] cellForRowAtIndexPath returning configured cell 
2011-05-22 15:29:47.212 myapp[4136:7c1b] endUpdates called 

回答

0

你檢查多少時間花費的tableView: cellForRowAtIndexPath:完成? 或者,也許你的自定義tableview單元格中的「layoutSubviews」需要很多時間?

+0

呀,我加記錄在每一步,一切都很快發生。我將用日誌摘錄更新原始問題。 – barrym 2011-05-22 14:33:05

+0

你使用自定義單元格嗎? – 2011-05-22 14:37:03

+0

嘗試使用時間分析器通過儀器運行您的應用程序,並檢查將出現的秒殺。 – 2011-05-22 14:37:25

6

您現在可能已經自己解決了這個問題,但是當我現在確實遇到了同樣的問題並且認爲需要爲後代做出回答時,我遇到了這個問題。

什麼是最有可能發生的事情是,你必須在主線程上設置您NSManagedObjectContext中,然後做你的save在不同的線程,從而導致對UITableView(這是在主線程)的動畫等到GCD線程已被照顧。

簡單的解決方法:做你的計算密集型的東西,以及插入到你的GCD線程內的MOC,但後來做save在主線程,就像這樣:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
    // Do all your processing and inserting here 

    // ... and then, when you're done: 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSError *anyError = nil; 
     BOOL success = [self.managedObjectContext save:&anyError]; 
     if(!success) { 
      // Error handling 
     } 
    }); 
}); 
+0

是的,這絕對需要回答後人,因爲我也遇到了這種確切的行爲,並可能花費數小時(在我已有的基礎上)通過文檔傾注並隨機嘗試,直到它工作。 – 2011-11-05 21:42:27

+0

輝煌,謝謝! :) – 2013-01-30 15:56:59

+0

爲我工作,謝謝... – human4 2013-04-25 19:00:57

相關問題