У меня есть пользовательская ячейка таблицы, в которой есть контент, я хочу сохранить его в новом контроллере, когда я позвонил в YouTube api, я установил максимальный результат 2, и он отобразил в таблице только 2 строки. И когда я пытаюсь сохранить в новом контроллере, он сохраняет 3, и один из них дублирует. как я могу сохранить это? Я уже выбрал с sender.tag, но он все еще возвращает 3.
Это мой код в виде таблицы в VideoController
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "videoId", for: indexPath) as! VideoCell
let video = videos[indexPath.row]
cell.video = video
cell.favoriteButton.tag = indexPath.row
cell.favoriteButton.addTarget(self, action: #selector(handleFavorite(sender:)), for: .touchUpInside)
return cell
}
и это моя функция handleFavorite и добавление делегата в мой VideoController
var delegate: SaveFavoriteDelegate?
@objc fileprivate func handleFavorite(sender: UIButton) {
let alert = UIAlertController(title: "Add to Favorite", message: nil, preferredStyle: .alert)
let action = UIAlertAction(title: "Favorite", style: .default) { (_) in
let context = CoreDataManager.shared.persistenceContainer.viewContext
let video = NSEntityDescription.insertNewObject(forEntityName: "Video", into: context)
video.setValue(self.videos[sender.tag].videoTitle, forKey: "videoTitle")
video.setValue(self.videos[sender.tag].videoId, forKey: "videoId")
do {
try context.save()
self.delegate?.didAddVideoFavorite(for: video as! Video)
} catch let saveErr {
print("Failed to save into core data:", saveErr)
}
}
alert.addAction(action)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
present(alert, animated: true)
}
Я создаю протокол для обработки передачи данных в мой новый контроллер, это мой код протокола
protocol SaveFavoriteDelegate {
func didAddVideoFavorite(for video: Video)
}
extension FavoriteController: SaveFavoriteDelegate {
func didAddVideoFavorite(for video: Video) {
videos.append(video)
let newIndexPath = IndexPath(row: videos.count - 1, section: 0)
tableView.insertRows(at: [newIndexPath], with: .automatic)
}
}