gpt4 book ai didi

ios - uitableviewcells 中的重复内容

转载 作者:行者123 更新时间:2023-11-29 01:48:32 25 4
gpt4 key购买 nike

我正在使用 PFQueryTableViewController 并尝试为 Parse 中的每个项目创建一个 videoCell。我只想玩当前事件的单元格。

这是我的 cellForRowAtIndexPath 方法。

 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cell: VideoTableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as? VideoTableViewCell

// cell?.parseObject = object
if let pfObject = object {
cell?.nameLabel?.text = pfObject["name"] as? String
print(pfObject["name"])

}
let file: PFFile? = object!.objectForKey("videoFile") as? PFFile
if self.currentActiveIndex == nil && file != nil {
self.currentActiveIndex = indexPath.row
print(file)
let fileUrl: NSURL? = NSURL(string: file!.url!)
let player: AVPlayer? = AVPlayer(URL: fileUrl!)
player?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.Initial, context: &PlayerStatusContext)
cell?.cellVideoView.setPlayer(player!)
cell?.cellVideoView.setVideoFillMode(AVLayerVideoGravityResizeAspectFill)

}
print(objects?.count)


return cell
}

出于某种原因,视频每次都会出现在第一个和第四个单元格中。我很好奇为什么。谢谢

最佳答案

您需要确保在重新使用单元格时移除播放器。

基本上,这意味着您的 if 需要一个 else 子句。可能是这样的 -

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cell: VideoTableViewCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as? VideoTableViewCell

// cell?.parseObject = object
if let pfObject = object {
cell!.nameLabel!.text = pfObject["name"] as! String
print(pfObject["name"])

}
let file: PFFile? = object!.objectForKey("videoFile") as? PFFile
if self.currentActiveIndex == nil && file != nil {
self.currentActiveIndex = indexPath.row
print(file)
let fileUrl: NSURL? = NSURL(string: file!.url!)
let player: AVPlayer? = AVPlayer(URL: fileUrl!)
player?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.Initial, context: &PlayerStatusContext)
cell?.cellVideoView.setPlayer(player!)
cell?.cellVideoView.setVideoFillMode(AVLayerVideoGravityResizeAspectFill)

}
else {
if let player=cell!.cellVideoView.player {
player.removeObserver(self, forKeyPath:"status")
cell!.cellVideoView.setPlayer(nil)
}
}

print(objects?.count)


return cell
}

此外,您有很多 ?,您可以在其中使用 !。例如,cell 不会为 nil(如果是,那就很糟糕,应该抛出异常)并且转换为 VideoTableViewCellString 或什至 PFFile 不应该失败,如果它失败了,那就是出了问题,异常可能是合适的,这样你就可以调试了。

关于ios - uitableviewcells 中的重复内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31665097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com