2013-03-14 73 views
0
void _WebThreadLockFromAnyThread(bool), 0x205acdf0: Obtaining the web lock from a thread other than the main thread or the web thread. UIKit should not be called from a secondary thread. 

這看起來很嚴重。我希望程序在那個時候打破。我不覺得我從主線外的任何地方訪問UIKit。如何調試從主線程以外的線程獲取Web鎖定?

但是,警告就在那裏,我不知道在我的代碼出現這種情況

回答

2

這意味着你的代碼是從非主線程在某個時刻調用。問題是你不記得或不知道在哪裏。你只是覺得你沒有,但實際上你的代碼確實如此。

我的建議是沉重的動態斷言。每個可疑的方法和功能安裝線程檢查斷言。例如,

- (void)test 
{ 
    NSAssert([[NSThread currentThread] isMainThread], @"This code is expected to be called from main thread!"); 
} 

然後,斷言最終會使您的應用程序在無效線程上下文中崩潰。如果你不那麼幸運,你可以按照字面的方法在每個方法上安裝斷言。

無論如何,一旦你斷言失敗,你可以在那裏開始。如果你發現不好的地方,下面的步驟只是微不足道的。

+0

這是最好的答案太遠了:)我實際上已經找到問題所在。但是,我認爲我們都需要更合理的東西。 – 2013-03-14 10:46:57

相關問題