为什么将视频下载到文件路径需要 [tableview reloadData] 才能在 tableview 上看到?
我已经在这个问题上停留了 3 天,我很困惑,而且 devforum 已经关闭了,这太糟糕了。
基本上,我有一个表格视图。每个表格视图单元都有一个 AVPlayer 和一个给定的远程 URL。在 cellForRowAtIndexPath 中,如果视频数据没有存储在本地,它会下载并保存到文件中,AVPlayer 会尝试在保存的文件位置播放视频。
问题是,什么都没有播放。
除非我打电话给[tableView reloadData]
每个cellForRowAtIndexPath
人以便渲染视频。我意识到这可能对性能非常不利,而且对用户来说也不是很好,所以我尝试使用reloadRowsAtIndexPath
for each cell,但这不起作用。
为什么我的应用需要调用 reloadData 才能从给定的本地文件位置加载数据?为什么 reloadRowsAtIndexPath 不起作用?就获取最近写入文件路径的视频数据而言,两者有什么区别。
我宁愿不重新加载任何东西,只是如果我不重新加载表格视图,应用程序不知道给定文件路径中的新数据。
代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *const cellIdentifier = @"cellIdentifier";
AVideoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[self getURL:someURLString forIndexPath:indexPath] options:nil];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
if (!cell) {
cell = [[AVideoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
cell.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:cell.player];
cell.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
layer.frame = CGRectMake(10.0, 10.0, 300.0, 179.0);
[cell.layer addSublayer: layer];
}
else {
[cell.player replaceCurrentItemWithPlayerItem:playerItem];
}
[cell.player play];
}