gpt4 book ai didi

ios - 应用程序在 UIViewController : com. apple.main-thread 中的用户设备上崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:16:56 24 4
gpt4 key购买 nike

我使用 fabric.io 来跟踪用户设备上的崩溃。我收到许多带有以下堆栈跟踪的崩溃报告:

0 libobjc.A.dylib 0x33e9ef46 objc_msgSend + 5
1 UIKit 0x29698225 +[UIViewController _viewControllerForFullScreenPresentationFromView:] + 196
2 UIKit 0x29697cfb -[UIWindow _scrollToTopViewsUnderScreenPointIfNecessary:resultHandler:] + 442
3 UIKit 0x29697b1f -[_UIScrollsToTopInitiatorView touchesEnded:withEvent:] + 214
4 UIKit 0x29697a41 -[UIStatusBar touchesEnded:withEvent:] + 416
5 UIKit 0x295fc245 forwardTouchMethod + 236
6 UIKit 0x294ae567 -[UIWindow _sendTouchesForEvent:] + 522
7 UIKit 0x294a7e31 -[UIWindow sendEvent:] + 544
8 UIKit 0x2947e759 -[UIApplication sendEvent:] + 196
9 UIKit 0x296f22f9 _UIApplicationHandleEventFromQueueEvent + 14168
10 UIKit 0x2947d1a9 _UIApplicationHandleEventQueue + 1352
11 CoreFoundation 0x25f27fbf __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
12 CoreFoundation 0x25f273cf __CFRunLoopDoSources0 + 218
13 CoreFoundation 0x25f25a35 __CFRunLoopRun + 772
14 CoreFoundation 0x25e733b1 CFRunLoopRunSpecific + 476
15 CoreFoundation 0x25e731c3 CFRunLoopRunInMode + 106
16 GraphicsServices 0x2d3d3201 GSEventRunModal + 136
17 UIKit 0x294dd43d UIApplicationMain + 1440

所以在整个堆栈跟踪中,没有一行我的代码。我想不出发生这种情况的任何原因。

有没有人有同样的问题或知道如何解决这个问题?

提前致谢

最佳答案

我遇到过类似的问题,得到的崩溃报告和你的几乎一样。

当用户点击状态栏以在 UIScrollView 中滚动到顶部时,您的崩溃一定是应用程序崩溃的情况。这正是我遇到的。

根本原因是我在调用 viewDidAppear 之前调用了 [UIScrollView setContentOffset:]。

不知何故,如果您在 View Controller 出现之前调用 UIScrollView setContentOffset,iOS 系统将在您的 UIScrollView 实例被释放后尝试保留它,从而导致 SIGEV 或 SIGBUS。

如果您使用启用僵尸对象调试您的应用程序,您肯定会得到类似的东西

[UIScrollView retain]: message sent to deallocated instance 0x1371a7600

.

如果您想重现崩溃,我建议您执行以下操作。

  1. 创建两个 View Controller ,都将 UIScrollView 实例添加到 View 层次结构中。

  2. 将它们推送到导航堆栈,并确保在 viewDidLoad 中和 viewDidAppear 之前为它们调用 setContentOffset。

  3. 弹出一个 View Controller 并将另一个留在导航堆栈中

  4. 点击状态栏。

解决方法是检查view controller的view.window属性是否为nil,如果为nil,则不调用UIScrollView实例的setContentOffset,延迟所有对setContentOffset的调用,直到view.window为非nil。

我也写了一篇关于这个的博文。虽然我的博客是中文的,但我添加了崩溃时调用堆栈的屏幕截图,你可以看到调用堆栈与这道题的堆栈相同.

https://huang.sh/2016/07/%e5%ae%9a%e4%bd%8d%e5%b4%a9%e6%ba%83uikituiviewcontroller-_viewcontrollerforfullscreenpresentationfromview/

关于ios - 应用程序在 UIViewController : com. apple.main-thread 中的用户设备上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29121949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com