zoukankan      html  css  js  c++  java
  • iOS 混合网页开发 问题

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

  • 相关阅读:
    mysql主从复制
    nginx代理tcp协议连接mysql
    spark安装配置
    DataX 3.0简介 安装及使用
    Consul 快速入门
    Etcd 使用入门
    常见负载均衡算法
    Container is running beyond memory limits
    HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}
    快速搞定Windows10环境下hadoop安装和配置
  • 原文地址:https://www.cnblogs.com/pretty-guy/p/4891286.html
Copyright © 2011-2022 走看看