iOS JavaScriptCore与H5交互时出现异常提示
在利用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要再主线程中执行,问题解决。