Как перезагрузить вид таблицы после закрытия модального окна - PullRequest
1 голос
/ 02 августа 2020

В настоящее время у меня есть данные, вводимые пользователем в модальном окне, и я сохраняю их в Core Data:

var container: NSPersistentContainer!

func saveContext() {
    if container.viewContext.hasChanges {
        do {
            try container.viewContext.save()
        } catch {
            print("An error occured whlie saving: \(error.localizedDescription)")
        }
    }
}

После закрытия модального окна я хочу перезагрузить таблицу на родительском контроллере представления. Но независимо от того, как я ее загружаю, из viewDidLoad или viewWillAppear таблица не перезагружается. Я знаю, что данные правильно сохраняются в Core Data, потому что, когда я перестраиваю, данные правильно отображаются в таблице.

Это функция, которую я хочу запускать при отклонении модального окна:

func loadSavedData() {
    if fetchedResultsController == nil {
        let request = Goal.createFetchRequest()
        let sort = NSSortDescriptor(key: "title", ascending: true)
        request.sortDescriptors = [sort]
        request.fetchBatchSize = 20
        
        fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: container.viewContext, sectionNameKeyPath: "title", cacheName: nil)
        fetchedResultsController.delegate = self
    }
    
    fetchedResultsController.fetchRequest.predicate = myPredicate
    
    do {
        try fetchedResultsController.performFetch()
        tableView.reloadData()
    } catch {
        print("Fetch failed")
    }
}

1 Ответ

1 голос
/ 02 августа 2020

В этой статье Шона Берри, опубликованной на Medium, вы можете узнать больше о причине, по которой viewWillAppear не вызывается.

Затем вы можете использовать закрытие, чтобы узнать, когда ваш модальный отклонен.

Добавьте его в свой контроллер модального представления:

var isDismissed: (() -> Void)?

Затем вы можете вызвать его, когда закроете контроллер:

self.isDismissed?()

Наконец, в презентации контроллер представления, когда вы запускаете модальное окно, вы можете прослушивать закрытие, например:

let modalController = YourController()
modalController.isDismissed = { [weak self] in
   self?.loadSavedData()
}
...