3

截图:

在此处输入图像描述


在此处输入图像描述我遇到了很多这样的崩溃,但问题是我只是被指向我的 appDelegate 第一行。我不知道在哪里寻找问题。我可以从以下崩溃报告中开始调查的任何想法?

Crashed: com.apple.main-thread
0  UIKit                          0x18d005640 __56-

[UIPresentationController runTransitionForCurrentState]_block_invoke + 460
1  UIKit                          0x18cf27aa8 _runAfterCACommitDeferredBlocks + 292
2  UIKit                          0x18cf1ae5c _cleanUpAfterCAFlushAndRunDeferredBlocks + 288
3  UIKit                          0x18ccac464 _afterCACommitHandler + 132
4  CoreFoundation                 0x1836a6cdc __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
5  CoreFoundation                 0x1836a4694 __CFRunLoopDoObservers + 412
6  CoreFoundation                 0x1836a4c50 __CFRunLoopRun + 1292
7  CoreFoundation                 0x1835c4c58 CFRunLoopRunSpecific + 436
8  GraphicsServices               0x185470f84 GSEventRunModal + 100
9  UIKit                          0x18cd1d5c4 UIApplicationMain + 236
10 AppName                        0x100ae3ca4 main (AppDelegate.swift:23)
11 libdyld.dylib                  0x1830e456c start + 4

更新:

基于以下几点:

应用程序在 runTransitionForCurrentState 上崩溃,但不知道原因

我正在寻找潜在的原因,并且想知道以下代码。

在进行同步过程时,我有以下函数用于显示带有活动指示器的视图。

public func displayActivityAlertWithCompletion(_ title: String, ViewController: UIViewController, completionHandler: @escaping ()->())
{
    let pending = UIAlertController(title: "\n\n\n"+title, message: nil, preferredStyle: .alert)
    //create an activity indicator
    let indicator = UIActivityIndicatorView(frame: pending.view.bounds)
    indicator.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    indicator.color = UIColor(rgba: Palette.loadingColour)
    //add the activity indicator as a subview of the alert controller's view
    pending.view.addSubview(indicator)
    indicator.isUserInteractionEnabled = false
    // required otherwise if there buttons in the UIAlertController you will not be able to press them
    indicator.startAnimating()


    ViewController.present(pending, animated: true, completion: completionHandler)
}

然后我像这样使用这个函数:

displayActivityAlertWithCompletion("Pushing Data", ViewController: self){_ in
    Helper_class.doSync(_cleanSync: false){
        //sync is complete
        Prefs.is_Syncing = false
        DispatchQueue.main.async {
            //dismiss my view with activity alert
            self.dismiss(animated: true){
                //dismiss my viewcontroller
                Toast(text: "Upload sync completed").show()
                self.dismiss(animated: true, completion: nil)
            }
        }
    }
}

这会是 UIKit 问题的潜在原因吗?

4

4 回答 4

4

按照这些步骤,你可以做到: 1. 打开导航器;2.切换到BreakPoint Navigator;3.点击左下角的“+”按钮;4. 弹出时,单击“异常断点”。

然后再次运行您的项目,它将在确切的点中断。

于 2018-02-13T10:57:58.767 回答
1

以下是我的建议:

  1. 尝试自己复制问题。由于您知道哪个屏幕发生了崩溃,您可以轻松识别导致崩溃的视图控制器/类。那将是一个好的开始。一旦你确定了班级,检查
    • 如果在屏幕加载或离开屏幕时发生崩溃。UIViewController在函数 - viewDidLoadviewWillAppear等上放置断点viewWillDisappear
    • 如果在按钮点击、段更改或表格重新加载等事件上发生崩溃。
  2. 从Crashlytics报告中获取更多信息。它总是带有发生崩溃的文件名。我附上了一个 Crashlytics 屏幕截图,其中显示了崩溃列表以及文件名。
  3. 执行上述操作后,使用更多信息更新您的问题。

在此处输入图像描述

根据您的代码,您将两次关闭同一个 viewController。将挂起作为全局变量。并将其视为:

pending.dismiss(animated: true, completion: nil)
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(0.1)) {
    self.dismiss(animated: true, completion: nil)  // This will be called after above time gap.
}
于 2018-02-13T11:08:34.450 回答
0

UIPresentationController某年进行一些迁移时,我遇到了构造函数崩溃的问题。

对我来说,通过更改presentingsource.UIViewControllerTransitioningDelegate

喜欢:

public func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
    return PresentationController(presentedViewController: presented, presenting: source)
}

虽然它一直是可重现的,所以也许不是同一个问题..

于 2018-02-13T11:50:28.790 回答
0

我遇到了同样的崩溃。我通过这种情况重现了这次崩溃。出现了一个viewController。当我使用这个 viewController 呈现另一个 viewController 而这个 viewController 被动画解除时,就会发生崩溃。我认为您可以添加一些条件来避免这种情况,例如判断viewContoller.isBeingDismissed. 如果isBeingDismissed为真,则使用其他视图控制器来执行当前操作。

于 2018-07-31T07:27:22.290 回答