【问题标题】:Huge delay when dismissing and presenting a UIViewController关闭和呈现 UIViewController 时出现巨大延迟
【发布时间】:2018-09-08 23:10:13
【问题描述】:

我有一个具有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)

    }
}

【问题讨论】:

    标签: ios swift protocols


    【解决方案1】:

    从 iOS 8 开始是bug。有一个解决方法:

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

    【讨论】:

    • 这很奇怪。而且我不希望Apple有这样的错误。此外,我们还有 iOS 11。
    • @subdan - 我被杀了。谢谢!
    • @Sh_Khan - 在这种情况下。到目前为止,它已经解决了我的问题...没有更多的停滞或极端延迟...到目前为止。
    • didSelectRowAt 内取消选择单元格
    • @Sh_Khan 请您详细说明一下吗?我会很感激的。
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 2021-10-21
    • 2020-10-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多