您的位置:首页 > 移动开发 > IOS开发

iOS 混合网页开发 问题

2015-10-19 11:02 483 查看
  在利用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要再主线程中执行,问题解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: