Во-первых, я действительно новичок в Obj-C, в основном, из фона php javascrript. Мои предыдущие приложения были в Phonegap. Моя проблема, с которой я столкнулся, - мне нужно загрузить веб-просмотр, но Apple продолжает отказываться от него, потому что таймер сторожевого таймера запускается на ios 6. Поэтому я попытался добавить веб-просмотр к второстепенной теме с моими прядильщиками в основном потоке, но затем я получаю эта ошибка.IOS UIWebView Crashes
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...
Вот мой код, если кто-нибудь может мне точку в правильном направлении, я бы очень признателен :)
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (dispatch_get_current_queue() == dispatch_get_main_queue()) {
NSLog(@"WebView is On Main Thread!");
} else {
NSLog(@"WebView is not On Main Thread!");
}
NSString *fullURL = @"http://www.example.com";
NSURL *url = [NSURL URLWithString: fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
_mywebview.backgroundColor = [UIColor grayColor];
_mywebview.opaque=NO;
[_mywebview loadRequest:requestObj];
_mywebview.scalesPageToFit = YES;
});
}
- (void) webViewDidStartLoad:(UIWebView *)webView
{
dispatch_async(dispatch_get_main_queue(), ^{
if (dispatch_get_current_queue() == dispatch_get_main_queue()) {
NSLog(@"Spinner Start On Main Thread!");
} else {
NSLog(@"Spinner Start not On Main Thread!");
}
[_myActivity startAnimating];
});
}
- (void) webViewDidFinishLoad:(UIWebView *)webView
{
dispatch_async(dispatch_get_main_queue(), ^{
if (dispatch_get_current_queue() == dispatch_get_main_queue()) {
NSLog(@"Spinner Stop On Main Thread!");
} else {
NSLog(@"Spinner Stop not On Main Thread!");
}
[_myActivity stopAnimating];
});
}
@end
Спасибо!
Вы должны обновить пользовательский интерфейс в основном потоке, здесь [ссылка] [1] в SO. [1]: http://stackoverflow.com/questions/4164984/iphone-update-ui-always-on-main-thread – siutsin
Я думаю, удаление все ваши заявления НОД бы это сделать, потому что webViewDidStartLoad и webViewDidFinishLoad являются асинхронными, и вы можете показать и удалить индикатор загрузки. – satheeshwaran
'UIKit' не является потокобезопасным, т. Е. Его следует обрабатывать только на основном потоке. Кроме того, все функции делегата 'UIKit' вызывается в основном потоке, поэтому нет необходимости проверять/делать явный вызов основного потока из них. – Amar