【问题标题】:App crashing on runTransitionForCurrentState but no clue as to why应用程序在 runTransitionForCurrentState 上崩溃,但不知道原因
【发布时间】:2017-01-24 14:27:25
【问题描述】:

我试过搜索这个,但没有运气,所以希望有一些大师可能知道答案。

我在 iTunes Connect 中看到我的应用因特定堆栈跟踪而崩溃的大量报告,但堆栈跟踪显示没有任何用处。

#0. Crashed: main
0  UIKit                          0x1871100c0 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 324
1  UIKit                          0x1871100bc __56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 320
2  UIKit                          0x1870630c8 _runAfterCACommitDeferredBlocks + 292
3  UIKit                          0x187070a80 _cleanUpAfterCAFlushAndRunDeferredBlocks + 92
4  UIKit                          0x186da25a4 _afterCACommitHandler + 96
5  CoreFoundation                 0x181c0c728 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
6  CoreFoundation                 0x181c0a4cc __CFRunLoopDoObservers + 372
7  CoreFoundation                 0x181c0a8fc __CFRunLoopRun + 928
8  CoreFoundation                 0x181b34c50 CFRunLoopRunSpecific + 384
9  GraphicsServices               0x18341c088 GSEventRunModal + 180
10 UIKit                          0x186e1a088 UIApplicationMain + 204
11 MyApp                          0x100082e6c main (main.m:19)
12 libdyld.dylib                  0x1816d28b8 start + 4

报告没有规律,发生在 iOS 9.1、9.2、9.3-10 和各种 iPhone 和 iPad 上,没有任何线索可以帮助重现。

以前有没有人经历过这样的事情,并对可能导致它的原因有所了解/怀疑?

【问题讨论】:

  • 展示你如何展示一些视图控制器的相关代码!!!
  • 感谢 Lion,但我至少要介绍来自大约 50 个不同地方的 VC,并且无法从其中任何一个地方重现问题。
  • 我遇到了同样的崩溃,我也不知道发生了什么。我唯一的线索是大多数时候,我的一个视图控制器连续两次报告viewWillDisappear/viewDidDisappear 对(有几秒钟的延迟),而没有报告它出现在两者之间。
  • 在调查了更多之后,我重复的将/确实消失可能是自定义容器控制器的 UIKit 错误,但它确实表明我在 UIAlertController 工作表的操作处理程序中拆除了视图控制器堆栈,如果这有帮助的话。在 UIAlertController 完全关闭之前,操作处理程序不应该运行,但那里可能有一些奇怪的比赛?

标签: ios objective-c uikit crash-reports uipresentationcontroller


【解决方案1】:

我遇到了完全相同的崩溃,并且我已经找到了原因。我的代码的高度简化版本看起来像

[self dismissViewControllerAnimated:YES completion:nil];
// call a method that ends up doing
[appRootViewController dismissViewControllerAnimated:NO completion:nil];

self 上面的 sn-p 是一个视图控制器,它以模态方式呈现在根目录上。视图控制器本身也在当前上下文中模态地呈现了一些其他控制器。所以我正在做的是尝试用动画解除那个过电流上下文控制器,然后调用其他代码最终从根目录解除任何呈现的视图控制器而不用动画。

或者换句话说,为我刚刚启动的动画关闭提供当前上下文的视图控制器会从视图层次结构中移除,而之前的动画关闭正在进行中。

在 Xcode 中重现此内容时,它还会将以下内容记录到控制台:

transitionViewForCurrentTransition 未设置,演示控制器在演示期间被关闭? (<_uiovercurrentcontextpresentationcontroller:>)

【讨论】:

  • 遇到非常相似的崩溃并怀疑原因相同
  • @Kevin Ballard 我有一个类似的问题,正在尝试找出根本原因。我添加了一个处理两次解雇的函数,我想知道这是否安全:stackoverflow.com/questions/48764872/…
  • @Lily Ballard 有没有简单的方法可以找到这个问题?我一直在查看我的代码,但我无法看到此日志消息: > transitionViewForCurrentTransition 未设置,演示文稿控制器在演示过程中被关闭? (<_uiovercurrentcontextpresentationcontroller:>) 这更多的是时间问题吗?在我们的应用程序中,我们有很多阻塞式微调器,当用户想要保存某些内容时,我们会显示一个阻塞式微调器来阻止任何操作……有没有办法告诉他们最后在哪个 ViewController 上?
猜你喜欢
  • 2013-08-10
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多