You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用搜索结果Cell点击后播放错误视频问题求助

解决搜索后点击Cell播放错误视频的问题

我看了你的代码,核心问题出在**isSearching的状态判断逻辑搞反了**,而且didSelectRowAt里的分支完全没必要——因为你已经维护了currentArray作为TableView的数据源,不管是搜索还是非搜索状态,直接用它就可以了!

问题分析

  1. isSearching赋值错误:在searchBar(_:textDidChange:)方法里,当搜索文本为空时你设置了isSearching = true,这完全和实际状态相反。应该是搜索文本不为空时才是搜索状态,为空时恢复成非搜索状态。
  2. didSelectRowAt逻辑冗余且错误:你分了isSearching的分支去取flix或者currentArray,但实际上currentArray在非搜索状态下已经等于flix了,直接用currentArray就能拿到当前点击Cell对应的数据源,不需要额外判断。这也是为什么你点击搜索结果时会播放错误视频——因为你的isSearching状态一直不对,导致代码走到了取flix的分支。

修复步骤

1. 修正searchBar(_:textDidChange:)方法的isSearching赋值

把原来的逻辑反过来:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchText.isEmpty {
        isSearching = false
        currentArray = flix
    } else {
        isSearching = true
        currentArray = flix.filter { $0.title.contains(searchText) }
    }
    grrr.reloadData()
}

2. 简化didSelectRowAt方法

直接使用currentArray获取点击的视频地址,去掉多余的分支判断:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedCourse = currentArray[indexPath.row]
    guard let videoUrl = URL(string: selectedCourse.location) else {
        print("Invalid video URL")
        return
    }
    let player = AVPlayer(url: videoUrl)
    let controller = AVPlayerViewController()
    controller.player = player
    
    present(controller, animated: true) {
        player.play()
    }
}

额外优化建议(可选)

  • 给图片加载加个缓存,避免重复请求:可以用第三方库或者自己实现简单缓存逻辑,防止滚动TableView时重复发起图片请求。
  • 在fetchJSON里同步更新currentArray:因为fetchJSON是异步请求,初始加载完成后需要同步更新显示用的数据源,修改后的片段如下:
do {
    let decoder = JSONDecoder()
    self.flix = try decoder.decode([Courses].self, from: data)
    self.currentArray = self.flix // 新增这行,确保数据源同步
    self.grrr.reloadData()
    print(self.flix)
} catch let jsonErr {
    print("Failed to decode JSON", jsonErr)
}

为什么这样改能解决问题?

  • 修正后的isSearching能正确反映当前是否处于搜索状态(不过现在didSelectRowAt已经不需要依赖它了)。
  • 直接使用currentArray作为数据源,确保点击的Cell和播放的视频是一一对应的——不管是搜索还是非搜索状态,currentArray都是TableView正在显示的数组,不会出现错位的情况。

内容的提问来源于stack exchange,提问作者Connor Woodford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:52:34