当nsstring获取URL内容时,我的应用程序崩溃了。
website = [NSString stringWithFormat:@"hidden."];
contents = [NSString stringWithContentsOfURL:[NSURL URLWithString:website] encoding:NSUTF8StringEncoding error:nil];
崩溃日志是:
void _WebThreadLockFromAnyThread(bool), 0x865cc40: 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.
2012-07-10 11:15:17.654 MyApplication[1505:19407] OK // some output
2012-07-10 11:15:17.660 MyApplication[1505:19407] bool _WebTryThreadLock(bool), 0x865cc40: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...
1 WebThreadLock
2 -[UITextRangeImpl isEmpty]
3 -[UITextRange(UITextSelectionAdditions) _isCaret]
4 -[UITextSelectionView setCaretBlinks:]
5 -[UIKeyboardImpl setCaretBlinks:]
6 -[UIKeyboardImpl setDelegate:force:]
7 -[UIKeyboardImpl setDelegate:]
8 -[UIPeripheralHost(UIKitInternal) _reloadInputViewsForResponder:]
9 -[UIResponder(UIResponderInputViewAdditions) reloadInputViews]
10 -[UIResponder(Internal) _windowBecameKey]
11 -[UITextField _windowBecameKey]
12 -[UIWindow makeKeyWindow]
13 -[UIWindow makeKeyAndVisible]
14 -[MyApplicationAppDelegate checkLogin]
15 -[NSThread main]
16 __NSThread__main__
17 _pthread_start
18 thread_start
使用[self performSelectorInBackground:@selector(checkLogin) withObject:nil];
中的IBAction
来调用代码。我做错了什么?
(Xcode 4.3,Mac OS X Lion,iPhone模拟器5.1)
答案 0 :(得分:3)
根据该错误消息,您尝试从后台线程更新UIKit
对象,并且只能从主线程更新UI。
相反,使用self performSelectorOnMainThread
回调主线程,使用您的网络电话返回时收到的任何信息更新您的用户界面。
从您的主要帖子:
[self performSelectorInBackground:@selector(checkLogin) withObject:nil];
在后台:
- (void)checkLogin {
// Do web stuff
...
[self performSelectorOnMainThread:@selector(updateUI)
withObject:nil
waitUntilDone:NO];
}
- (void)updateUI {
[statusLabel setText:@"Done!"];
}
答案 1 :(得分:0)
尝试使用
- (id)performSelector:(SEL)aSelector withObject:(id)anObject.