一个小问题
2015-12-01 13:54
127 查看
我的浏览器在搭建好基本UI后运行还算正常。但添加了自动旋转代码后,开始报错。即使关闭Xcode,在模拟器上独立运行app,也只能坚持不到一分钟就闪退。
错误代码:
看来是上一篇提到的添加进度条的代码出现了问题。
- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void *)context {
这段代码在WKWebView的estimatedProgress属性发生变化时,显示UIProgressView控件,并当estimatedProgress属性为1时消失。
我的代码问题在于:设备每次旋转后,app都会移除WKWebView控件,并重新添加新的WKWebView控件。其estimatedProgress属性出现了从1到0的情况,对于这个观察事件来讲却无法作出反应,因为我将UIProgressView控件添加到了WKWebView控件上,随之移除并重新生成。
解决办法是,不再对WKWebView做 移除并重新生成 的老办法,而是直接设置
错误代码:
***Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<ViewController: 0x7f877a71a1a0>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled. Key path: estimatedProgress Observed object: <WKWebView: 0x7f877a5c41c0; frame = (0 0; 667 375); gestureRecognizers = <NSArray: 0x7f877a5e1e30>; layer = <CALayer: 0x7f877a5c3b70>> Change: { kind = 1; new = "0.6176357155547082"; } Context: 0x0' ***First throw call stack: ( 0 CoreFoundation 0x000000010b7a4c65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010b43dbb7 objc_exception_throw + 45 2 CoreFoundation 0x000000010b7a4b9d +[NSException raise:format:] + 205 3 Foundation 0x000000010b06acaf -[NSObject(NSKeyValueObserving)observeValueForKeyPath:ofObject:change:context:] + 73 4 NewBrowserProject 0x000000010aefa246 -[ViewController observeValueForKeyPath:ofObject:change:context:] + 1030 5 Foundation 0x000000010af9ad96 NSKeyValueNotifyObserver + 356 6 Foundation 0x000000010af99fbd NSKeyValueDidChange + 466 7 Foundation 0x000000010af9e6df -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] + 118 8 WebKit 0x000000010d2c47d1 _ZN6WebKit13PageLoadState13commitChangesEv + 1133 9 WebKit 0x000000010d227dc6 _ZN6WebKit12WebPageProxy17didChangeProgressEd + 74 10 WebKit 0x000000010d23a96c _ZN6WebKit12WebPageProxy17didReceiveMessageEPN3IPC10ConnectionERNS1_14MessageDecoderE + 2976 11 WebKit 0x000000010d12df58 _ZN3IPC18MessageReceiverMap15dispatchMessageEPNS_10ConnectionERNS_14MessageDecoderE + 120 12 WebKit 0x000000010d26cd9c _ZN6WebKit15WebProcessProxy17didReceiveMessageEPN3IPC10ConnectionERNS1_14MessageDecoderE + 24 13 WebKit 0x000000010d0b5baa _ZN3IPC10Connection15dispatchMessageENSt3__110unique_ptrINS_14MessageDecoderENS1_14default_deleteIS3_EEEE + 94 14 WebKit 0x000000010d0b85c4 _ZN3IPC10Connection18dispatchOneMessageEv + 110 15 JavaScriptCore 0x00000001153c1436 _ZN3WTF7RunLoop11performWorkEv + 454 16 JavaScriptCore 0x00000001153c1cea _ZN3WTF7RunLoop11performWorkEPv + 26 17 CoreFoundation 0x000000010b6d8431 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 18 CoreFoundation 0x000000010b6ce2fd __CFRunLoopDoSources0 + 269 19 CoreFoundation 0x000000010b6cd934 __CFRunLoopRun + 868 20 CoreFoundation 0x000000010b6cd366 CFRunLoopRunSpecific + 470 21 GraphicsServices 0x0000000110264a3e GSEventRunModal + 161 22 UIKit 0x000000010bddf8c0 UIApplicationMain + 1282 23 NewBrowserProject 0x000000010af00aaf main + 111 24 libdyld.dylib 0x000000010e5fb145 start + 1 25 ??? 0x0000000000000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
看来是上一篇提到的添加进度条的代码出现了问题。
- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void *)context {
if ([keyPath isEqualToString:@"estimatedProgress"] && object == self.webView) { [self.loadingProgress setAlpha:1.0f]; [self.loadingProgress setProgress:self.webView.estimatedProgress animated:YES]; if(self.webView.estimatedProgress >= 1.0f) { [UIView animateWithDuration:0.3 delay:0.3 options:UIViewAnimationOptionCurveEaseOut animations:^ { [self.loadingProgress setAlpha:0.0f]; } completion:^(BOOL finished) { [self.loadingProgress setProgress:0.0f animated:NO]; } ]; } }else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } }
这段代码在WKWebView的estimatedProgress属性发生变化时,显示UIProgressView控件,并当estimatedProgress属性为1时消失。
我的代码问题在于:设备每次旋转后,app都会移除WKWebView控件,并重新添加新的WKWebView控件。其estimatedProgress属性出现了从1到0的情况,对于这个观察事件来讲却无法作出反应,因为我将UIProgressView控件添加到了WKWebView控件上,随之移除并重新生成。
解决办法是,不再对WKWebView做 移除并重新生成 的老办法,而是直接设置
setAutoresizingMask:属性。
相关文章推荐
- Activiti学习笔记5 — 常用API解析
- Activiti学习笔记4 — 流程实例化
- Activiti学习笔记3 — 流程定义
- YUV格式详细解释与FFMPEG的关系
- 论文投稿(持续更新)
- java.lang.SecurityException: Unable to find app for caller android.app.ActivityThread$
- HBase修改压缩格式及Snappy压缩实测分享
- Android Activity值传递
- android:descendantFocusability用法简析
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
- 执行yum报 undefined symbol: CRYPTO_set_locking_callback 错误
- 阶段性总结
- DEB方式在UBUNTU安装ODOO 8.0
- SMPP协议解析
- 第四天 魔小灯(蓝牙智能灯)1
- 集群、分布式、负载均衡区别与联系
- Objective-C中的Block
- duilib各种布局的作用,相对布局与绝对布局的的意义与用法
- 图像卷积的理解
- 简单的使用GitHub,代码管理