Загрузка данных из основных данных для отображения в виде коллекции - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть два контроллера представления (vc1 и vc2). На vcTwo, когда я добавляю игру, я сохраняю элемент, используя основные данные. Элемент должен отображаться немедленно в vcOne из представления коллекции. Но представление коллекции не загружает данные сразу даже при collectionView.reloadData. Я должен перезапустить приложение, чтобы увидеть последний добавленный элемент в представлении коллекции. Как я мог сделать это.

var game: GameMo?
var gamesMo: [GameMo]? = []
var fetchRequestController : NSFetchedResultsController<GameMo>!

extension ViewControllerOne: NSFetchedResultsControllerDelegate {

    func fetechRequest (){
        let fetchRequest = NSFetchRequest<GameMo>(entityName: "Game")

      fetchRequest.sortDescriptors = [NSSortDescriptor(key: "win", ascending: true)]

       if let appDelegate = (UIApplication.shared.delegate as? AppDelegate){
            let context = appDelegate.persistentContainer.viewContext

            // fetch result controller
            fetchRequestController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
            fetchRequestController.delegate = self

            do{
                try fetchRequestController.performFetch()

                if let fetchedObjects = fetchRequestController.fetchedObjects {
                    gamesMo = fetchedObjects


                    print(fetchRequest)
                }
            }catch{
                fatalError("Failed to fetch entities: \(error)")
            }
        }

    } 

ViewController One

class ViewControllerTwo: UIViewController {
     var game: GameMo?
       func saveToCoreData(){
            guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
            game = GameMo(context: appDelegate.persistentContainer.viewContext)
            game?.gameOutcome = gameOutcome.text
            game?.goal = Int32(goal.text ?? "0") ?? 0
            game?.rivalGoal = Int32(rivalGoal.text ?? "0") ?? 0
    print("Saving data")
            appDelegate.saveContext()
            delegate?.reloadCollectionViewData()
        }
}

1 Ответ

0 голосов
/ 11 апреля 2020

Вы должны вызвать fetchRequest() VC1 после строки appDelegate.saveContext() в функции saveToCoreData() VC2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...