Реализация основного запроса на выборку данных в UICollectionViewItems - PullRequest
0 голосов
/ 03 марта 2019

Я внедряю Базовые Данные в моем приложении для iOS.Я использую UICollectionView.Я пытаюсь вставить избранные треки пользователей в основные данные.

Вот код после нажатия на изображение (избранное) в моем UICollectionViewItems

@objc func addToFavouriteClicked(_ sender:UIButton){
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "Favurites", in: context)
    let favSong = NSManagedObject(entity: entity!, insertInto: context)
    favSong.setValue(videos[sender.tag], forKey: "link")
    favSong.setValue(titles[sender.tag], forKey: "title")
    favSong.setValue(images[sender.tag], forKey: "image")
    favSong.setValue(channels[sender.tag], forKey: "owner")
    favSong.setValue("sender.tag", forKey: "id")
    do {
        try context.save()
    } catch let err{
        print("Failed saving",err.localizedDescription)
    }

    sender.setBackgroundImage(UIImage(named: "final2heart-outline-96"), for: .normal)
}

Теперь проблема в том, как я могу проверить, чтокакие данные товара являются любимыми или нет?Для этого мне нужно извлечь всех записей из UICollectionViewItems?а затем сопоставить с каждым элементом подробности с основными записями данных?

Как я могу это сделать?Я попытался взломать, но это не сработало.

Вот код

   func fetchAndUpdateFavorites(){

    for i in 0..<collectionView.numberOfItems(inSection: 0) - 1{
        let indexPath = IndexPath(row: i, section: 0)
        DispatchQueue.main.async {

            let cell = self.collectionView.cellForItem(at: indexPath) as! PlayerCollectionViewCell
            let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Favurites")
            request.returnsObjectsAsFaults = false
            do {
                let appDelegate = UIApplication.shared.delegate as! AppDelegate
                let context = appDelegate.persistentContainer.viewContext
                let result = try context.fetch(request)

                for data in result as! [NSManagedObject] {
                    let id = data.value(forKey: "id") as! String
                    let url = data.value(forKey: "image") as! String
                    let titlee = data.value(forKey: "title") as! String

                    if id == "\(indexPath.row)" && url == self.images[indexPath.row] && titlee == self.titlesArr[indexPath.row] {
                        cell.addToFavouriteButton.setBackgroundImage(UIImage(named: "final2heart"), for: .normal)
                        print(data.value(forKey: "id") as! String,"Favourite")
                    }
                }
            } catch {
                print("Failed")
            }
        }
    }
}
...