2011-03-05 111 views
1

void _WebThreadLockFromAnyThread(bool),0x4c60190:從主線程或Web線程以外的線程獲取Web鎖。 UIKit不應該從輔助線程調用。目標C,這是什麼警告?

如果我嘗試從UITextView獲取文本,我會收到此警告消息。

+2

發佈相關的代碼將是一個很大的幫助。 – DVG 2011-03-05 09:00:51

回答

2

您是否產生了另一個線程並從中調用UIKit方法?像+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg 這樣的方法會產生一個新的線程。

UI相關代碼只能在主線程中使用。因爲很多UI代碼都使用多線程,所以允許從任何線程調用UI代碼很容易導致無法管理的死鎖。所以大多數UI框架都有這個規則。

可以強制代碼使用方法類似- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

作爲一個例子,主線程運行,

- (void)UIControlCode 
{ 
} 
- (void)processingCodeInOtherThread 
{ 
    [self performSelectorOnMainThread:@selector(UIControlCode) withObject:nil waitUntilDone:NO]; 
} 
+0

非常感謝。我解決了這個問題。問題是我試圖從不是來自主線程的另一個線程訪問UITextview。 – codereviewanskquestions 2011-03-06 01:18:46