【问题标题】:UIWebView crash with Assertion failed: (addr != MAP_FAILED), function _open_and_mmap_for_readingUIWebView crash with Assertion failed: (addr != MAP_FAILED), function _open_and_mmap_for_reading
【发布时间】:2013-10-04 22:17:47
【问题描述】:

我有一个嵌入了UIWebView 的应用程序。当我将特定页面加载到其中时,它会毫无例外地使模拟器崩溃,但我在 Xcode 控制台中看到以下消息:

断言失败:(addr != MAP_FAILED),函数 _open_and_mmap_for_reading,文件/SourceCache/LanguageIdentifier_Sim/LanguageIdentifier-114/LanguageIdentifier.c, 第 593 行。

有时,我会在控制台中看到以下消息:

malloc: * mmap(size=2097152) 失败(错误代码=12)

此崩溃发生在后台线程中:

Thread 20, Queue : com.apple.root.default-priority
#0  0x93c4ea6a in __pthread_kill ()
#21 0x92138e72 in _pthread_wqthread ()

我不认为这是我的内存泄漏。这会在模拟器和设备的 iOS6、iOS6.1 和 iOS7 中崩溃。设备崩溃时,我从未在控制台中看到任何消息。

有什么想法吗?

【问题讨论】:

    标签: ios objective-c uiwebview


    【解决方案1】:

    特定的 HTML 有一个具有以下样式的表格:

    width="393025px"
    

    当我调用以下行时:

    CGSize fitsSize = [self.webView sizeThatFits:CGSizeMake(CGRectGetWidth(self.view.bounds), CGFLOAT_MAX)];
    

    我得到了一个非常宽的尺寸:(width=393158, height=2763),我立即将UIWebView 的尺寸设置为:

    self.webView.frame = CGRectMake(0, 0, fitsSize.width, fitsSize.height)
    

    显然,这很糟糕。 UIWebView 受不了那么大。

    将我的调整大小代码更改为

    self.webView.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), fitsSize.height)
    

    解决了问题。

    【讨论】:

    • 这个身高超高。您的网页视图是滚动视图吗?这有点冗长,但我喜欢这样做 CGRect frame = self.webView.frame; frame.size.height = fitsSize.height; self.webView.frame = frame; 这样你只需要修改感兴趣的维度。
    • 是的,UIWebViewUIScrollView 中(它本身在 UITableView.headerView 中)。我想这可能值得提交一份雷达报告。
    • 在这种情况下,为什么不直接放弃滚动视图而依赖 Web 视图的内置滚动视图呢?
    • 因为我希望UITableView 的内容在UIWebView 下方无缝滚动。
    猜你喜欢
    • 2019-05-24
    • 2021-04-09
    • 2020-06-07
    • 2019-11-12
    • 2021-02-08
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多