• 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要再主线程中执行,问题解决。

  • 相关阅读:
    NOIP2018 模拟赛(二十二)雅礼NOI
    浅谈左偏树在OI中的应用
    HDU3062&&HDU1814
    2-SAT超入门讲解
    bitset常用用法&&简单题分析
    NOIp2014提高组初赛错题简析
    2018十月刷题列表
    BZOJ 4804: 欧拉心算
    Luogu P2568 GCD
    Luogu P4137 Rmq Problem / mex
  • 原文地址:https://www.cnblogs.com/weiboyuan/p/5311730.html
Copyright © 2020-2023  润新知