Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIWebView为[WebActionDisableCalayerDelegate setBeingRemoved:]引发异常_Ios_Objective C_Uiwebview_Ios8 - Fatal编程技术网

Ios UIWebView为[WebActionDisableCalayerDelegate setBeingRemoved:]引发异常

Ios UIWebView为[WebActionDisableCalayerDelegate setBeingRemoved:]引发异常,ios,objective-c,uiwebview,ios8,Ios,Objective C,Uiwebview,Ios8,在运行iOS 8时,我开始看到以下异常来自UIWebView: [WebActionDisableCalayerDelegate setBeingRemoved:]:发送到实例0x167ee900的选择器无法识别 *WebKit丢弃了webView:willRemoveScrollingLayer:withContentsLayer:forNode:delegate:-[WebActionDisablengCalayerDelegate setBeingRemoved: 当我更改我的UIWebV

在运行iOS 8时,我开始看到以下异常来自
UIWebView

[WebActionDisableCalayerDelegate setBeingRemoved:]:发送到实例0x167ee900的选择器无法识别

*WebKit丢弃了webView:willRemoveScrollingLayer:withContentsLayer:forNode:delegate:-[WebActionDisablengCalayerDelegate setBeingRemoved:

当我更改我的
UIWebView
上的一些约束,然后调用:

 self.webViewWidthConstraints.constant = newWidth;
 [self.webView setNeedsLayout];
 [self.webView layoutIfNeeded];
(这是为了重新呈现webview的内容以正确匹配其宽度)


幸运的是,该异常被丢弃,因此应用程序没有崩溃。为什么会发生这种情况,有什么方法可以防止它发生?

不确定这是否是您的情况,但我也开始在iOS 8上看到这个问题,我们跟踪到iframe上使用以下CSS属性的情况:

-webkit-overflow-scrolling: touch;
在我们删除它之后,我们不再有那些错误消息


注意:在我的例子中,这并不是因为更改了任何约束而发生的,而是在我们浏览HTML时发生的。

我发现,通过在可滚动内容中添加“-webkit transform:translateZ(0px);”(我在可滚动容器中有一个div),它为我解决了这个问题。希望这能有所帮助。

在我的例子中,问题是iframe内容的内部。表格宽度大于通过CSS定义的iframe宽度。iframe滚动已关闭,表格已将iframe拉伸到表的最小计算宽度。另一个副作用:iframe内容未完全恢复可见(从右侧切断)


删除表格表单iframe内容已经解决了这个问题。

正如@AndréMorujão所回答的,从滚动元素中删除
-webkit overflow滚动:touch;
会停止异常。但是我发现只有在向滚动元素添加
显示:无
css时才会发生异常

编辑:我可以继续使用
display:none
隐藏我的滚动元素,方法是将
-webkit-overflow-scrolling:touch;
放在它自己的类
中。scroll
并在隐藏之前和之后使用jquery从我的滚动元素中添加和删除该类:

<style>
    .scroll
    {
         -webkit-overflow-scrolling:touch;
    }
</style>
<script>
function hide()
{
    $('#scrolling_element).removeClass('scroll');
    $('#scrolling_element).css('display', 'none');
}
function show()
{
    $('#scrolling_element).css('display', 'block');
    $('#scrolling_element).addClass('scroll');
}
</script>

纸卷
{
-webkit溢出滚动:触摸;
}
函数hide()
{
$('#滚动元素).removeClass('scroll');
$('#滚动元素).css('display','none');
}
函数show()
{
$('#滚动元素).css('display','block');
$('#滚动元素).addClass('scroll');
}

由于给出的答案对我都没有帮助,我不得不在Objective-C运行时的帮助下解决这个问题

首先,我提供了一个简单的函数:

id setBeingRemoved(id self, SEL selector, ...)
{
   return nil;
}
那么这两条线,

    Class class = NSClassFromString(@"WebActionDisablingCALayerDelegate");
    class_addMethod(class, @selector(setBeingRemoved:), setBeingRemoved, NULL);
而且它可以工作。

使用而不是UIWebView(它最初包含在iOS 8中).我已经试过了,它似乎没有这个bug。而且,与它的前身相比,它可能会提高性能。看起来苹果很可能会在不久的将来成为事实上的标准,如果不是现在的话。它的界面和代理有点类似于UIWebView。绝对值得一试


如果您的目标是iOS 8之前的版本,您可以实施回退过程来加载UIWebView或WKWebView,这是一种开箱即用的实现

我在cordova应用程序中使用iframe时遇到了相同的异常。是的,使用cordova(((此处相同。不使用cordova。将简单网络视图显示为模式视图并旋转设备会引发此异常(仅限iOS8,在iOS7中使用)好的,所以我为自己解决了问题-问题是在JS中计算一个文本字段的宽度。我目前正在使用此排除规则作为objc_exception_throw上的断点,以防止这些异常暂停调试器:!(BOOL)[$r0 reason]hasPrefix:@“-[WebActionDisableCalayerDelegate setBeingRemoved:”]在我的例子中,当一个webview中存在两个或多个
元素,并且
-webkit overflow滚动:touch;
属性时,就会发生这种情况。我将其放在我的
body
标记上,它修复了所有问题。因为您不能要求万维网添加
-webkit转换
,解决方案在于迁移由于
UIWebView
本质上是不推荐使用的,您可以提供更多关于此实现的详细信息吗?我试图实现它,但遇到了一系列问题。谢谢!您到底需要什么详细信息?我需要覆盖更多的方法,至少在iOS 8.4.1中是这样。请看。至少看起来是这样esn现在不会崩溃。我几乎“禁用”了该委托中的所有方法。对不起,我不明白。你做的一切都很好。你有什么问题吗?有时它调用新函数,现在有点正常。请随时用我的代码更新你的答案。谢谢Andrey:)
    Class class = NSClassFromString(@"WebActionDisablingCALayerDelegate");
    class_addMethod(class, @selector(setBeingRemoved:), setBeingRemoved, NULL);