標籤:
在利用JavaScriptCore與H5互動時出現異常提示:
This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.
從字面意思看,是因為在後台線程修改了UI,於是乎開始驗證
_weak typeof(self)weakSelf = self; JSContext *tContext = [weakSelf.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; tContext[@"jsredirect"] = ^(){ NSArray *tArgs = [JSContext currentArguments]; JSValue *tJSValue = [tArgs firstObject]; @try { NSDictionary *tActionValueDic = [tJSValue toDictionary]; NSLog(@"JSValue:%@", tActionValueDic); NSString *tUrlStr = tActionValueDic[@"url"]; if ([tUrlStr isEqualToString:@"chartDispose"]) { [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"]; [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitDiskImageCacheEnabled"]; [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"WebKitOfflineWebApplicationCacheEnabled"]; [[NSUserDefaults standardUserDefaults] synchronize]; }else{ CGGradeJumpWebViewController *vc = [[CGGradeJumpWebViewController alloc]init]; vc.urlStr = tUrlStr; NSLog(@"Current Thread:%@",[NSThread currentThread]); dispatch_async(dispatch_get_main_queue(), ^{ //UI修改 NSLog(@"Current Thread:%@",[NSThread currentThread]); [weakSelf.navigationController pushViewController:vc animated:YES]; }); } } @catch (NSException *exception) { NSLog(@"exception:%@", exception); } };
果然,在XCode7中網頁互動實在後台線程中執行的(XCode6木有問題),所以在互動時修改UI要再主線程中執行,問題解決。
iOS 混合網頁開發 問題