解雇和展示UIViewController时的巨大延迟

时间:2018-09-08 14:21:10

标签: ios swift protocols

我有一个带有UICollectionView的应用程序。当用户单击单元格上的按钮(而不是单元格本身)时,将显示自定义弹出窗口UIViewController,并在UITableView中显示选项列表。当用户点击选项(行)之一时,当前的自定义弹出窗口UIViewController将被关闭,并显示一个新的UIViewController。我使用委托/协议来做到这一点。

我的问题如下。当我点击其中一个选项时,将有1-4秒的很长的延迟才被取消,并出现另一个UIViewController。在其他时间,它是即时的,没有延迟。延迟后,我在控制台中发现以下错误消息。有人可以建议吗?我目前在indexPath [0,2]的行中遇到此问题-请参阅下文。

错误消息:

  

myApplicationName [7141:3954956] [BoringSSL]函数boringssl_session_errorlog:第2881行[boringssl_session_read] SSL_ERROR_ZERO_RETURN(6):操作失败,因为使用close_notify警报完全关闭了连接

我的UITableView代码,用于点按一行:

class MoreOptionsOnPDFViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    ....

    var moveDocDelegate: MoveFolder!

    // TAP ON ROW
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if indexPath == [0,0]{ // EDIT FILE NAME
            print("EDIT FILENAME")

        } else if indexPath == [0,1]{ // EDIT TAGS

            print("EDIT DOCUMENT")

        }else if indexPath == [0,2]{ // MOVE FOLDER

            guard let scanID = self.scanID else{return}
            if let scanID = self.scanID{
                // SHOW MOVE DOCUMENT UIVIEWCONTROLLER
                dismiss(animated: true) {
                    self.moveDocDelegate.moveDocument(scanId: scanID)
                }
            }

        } else if indexPath == [0,3]{ // SHARE DOCUMENT
            print("SHARE DOCUMENT")

            if let pdfURL = self.pdfURL{
                self.sharePDF(pdfURL: pdfURL)
            }

        } else if indexPath == [0,4]{ // BIN

        }
    }
}

其他班级:

 class CollectionViewFolder: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate ,UICollectionViewDelegateFlowLayout, MoreInfoDocument, MoveFolder{

    // SHOW MOVE FOLDER OPTIONS
    func moveDocument(scanId: String) {

        let moveFolderVC = storyboard?.instantiateViewController(withIdentifier: "movefolder") as! MoveFolderViewController

        moveFolderVC.scanId = scanId
        present(moveFolderVC, animated: true, completion: nil)

    }
}

1 个答案:

答案 0 :(得分:2)

自iOS 8起,它是bug。有一种解决方法:

DispatchQueue.main.async {
    present(...) or dismiss(...)
}