Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 多次点击uitableviewcell会导致异常:应用程序试图以模态方式呈现活动控制器_Ios_Swift - Fatal编程技术网

Ios 多次点击uitableviewcell会导致异常:应用程序试图以模态方式呈现活动控制器

Ios 多次点击uitableviewcell会导致异常:应用程序试图以模态方式呈现活动控制器,ios,swift,Ios,Swift,我不确定是否有真正的解决方案,但当我在tableviewcell上快速按下多次时,会出现以下错误: 由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“应用程序试图显示 主动控制器 如果我只按一次,我的代码工作正常。除非我真的很快地按了几下。有没有办法避免这种情况 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { l

我不确定是否有真正的解决方案,但当我在tableviewcell上快速按下多次时,会出现以下错误:

由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“应用程序试图显示 主动控制器

如果我只按一次,我的代码工作正常。除非我真的很快地按了几下。有没有办法避免这种情况

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let selectedCell = tableView.cellForRow(at: indexPath)

    selectedUserAtIndexPath = (indexPath as NSIndexPath).section
    // download and show video
    playVideoAtCell((indexPath as NSIndexPath).section)

}

func playVideoAtCell(_ cellNumber: Int) {

    getDownloadURL(cellNumber) { (url) in

        self.avPlayer = AVPlayer(url: url)
        self.avPlayerViewController.player = self.avPlayer
        self.avPlayerViewController.showsPlaybackControls = false

        NotificationCenter.default.addObserver(self, selector: #selector(self.videoItemFinished(_:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.avPlayer?.currentItem)

        self.present(self.avPlayerViewController, animated: true) { () -> Void in
            self.avPlayerViewController.player?.play()
        }
    }
}


func getDownloadURL (_ cellNumber: Int, callback: @escaping (URL) -> ()) {
    let mediaID = mediaIntroQueueList[cellNumber]["mediaID"] as? String

    Constants.storageMediaRef.child("\(mediaID!)").downloadURL(completion: { (URL, error) in
        if let downloadURL = URL {
            callback (downloadURL)
        }
    })
}

错误代码提供了您需要知道的所有信息。当您多次轻触手机时,您试图反复呼叫:

    self.present(self.avPlayerViewController, animated: true) { () -> Void in
        self.avPlayerViewController.player?.play()
    }
你可以做的是在playVideoAtCell开始时检查你的播放器是否已经创建。因此,您可以假设它已经呈现:

func playVideoAtCell(_ cellNumber: Int) {
    if self.avPlayer != nil { return }

或者,如果您已经呈现了一个模态视图,您可以在某个地方添加一个bool来跟踪

@makthrow没问题:如果你能解决你的问题,一定要接受答案!