【发布时间】:2014-05-01 17:38:29
【问题描述】:
不幸的是,我将 Xcode 自动更新到版本 5.1.1 (5B1008),现在我的一个应用程序以一种非常奇怪的方式崩溃了。
该应用程序是 PhoneGap 3.4 (+ jQuery Mobile 1.3.1) 混合应用程序,当我尝试打开包含 ~20 JQM 复选框的 JQM 页面时发生崩溃。
崩溃发生在WebCore WebCore::RenderThemeIOS::paintCheckboxDecorations 在WebThread 中调用的CoreGraphics CGPathAddLineToPoint,我猜是当WebCore 尝试在JQM 页面上呈现复选框时。
控制台显示:
Assertion failed: (CGFloatIsValid(x) && CGFloatIsValid(y)), function void CGPathAddLineToPoint(CGMutablePathRef, const CGAffineTransform *, CGFloat, CGFloat), file Paths/CGPath.cc, line 224.
(lldb)
任何其他不包含复选框的 JQM 页面都会正确显示,并且不会使应用程序崩溃。
编辑:有趣的是,崩溃是由这行 Javascript 触发的:
$('#my_checkbox').prop("checked", my_boolean_value).checkboxradio("refresh");
如果我禁用它,则会显示 JQM 页面。但是,即使上面的行被禁用,如果我点击任何复选框,它也会再次崩溃,上面的Assertion failed 消息相同。 (我猜是因为 JQM 切换了检查/未检查类。)
我已经执行了我能想到的所有技巧(清理、禁用调试器、重新启动、重新安装 Xcode),但没有运气。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
关于这种类型的崩溃错误,我最多能发现它只有在动画正在进行时尝试绘制时才会发生。但是,由于它是断言失败而不是未捕获的异常,因此您唯一能做的就是避免运行有问题的代码,如果代码完全位于您无法修改的库中,这可能会出现问题。如果您的崩溃错误与我的类似……那么也许某个地方正在播放可以禁用的动画?否则我无能为力;这种类型的崩溃本身就是一种邪恶。
-
感谢您的评论。确实,花了一天时间想明白后,我会下定决心改变我的设计,以免触发“违规”代码——因为我的应用程序是混合的,我真的无法控制 JS 之间交互的细节/CSS 和 WebCore。
-
我在下面“接受”我自己的答案,因为除了防止触发错误之外,没有什么可以做的。 (并希望 Apple 修复 WebCore。)
标签: ios xcode jquery-mobile cordova