Сохранить выбранный контент в строке таблицы - PullRequest
0 голосов
/ 09 января 2019

У меня есть пользовательская ячейка таблицы, в которой есть контент, я хочу сохранить его в новом контроллере, когда я позвонил в 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)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...