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