Обичам да използвам unwind segues, но попаднах на проблем...
Имам родителски контролер (наречете го Начало), който представя дете модално (наречете го Подробности).
Контролерът Detail има табличен изглед, който показва колекция от основни обекти с данни, и имам бутон Изтриване, когато се докосне, искам да изтрия всички тези обекти и да отхвърля модала, и да актуализирам домашния контролер, за да покажа, че обектите са били изтрити.
Първият ми опит за self.context.deleteObject(entity)
, последван от размотаване, проработи, освен в ситуацията, в която има достатъчно обекти, които табличният изглед може да превърта с инерция, и бутонът Изтриване е докоснат, докато таблицата все още забавя. Което причинява срив :(
Доколкото мога да разбера, това е, защото току-що изтрих обектите, но тъй като изгледът на таблицата все още се превърта (докато анимацията за отхвърляне завършва), tableView се опитва да премахне клетките, които предстои да се появят (поради превъртането), но след това се срива защото вече няма обекти.
Ако viewDidAppear беше извикан, когато изглед на модел е отхвърлен, бих могъл да актуализирам Home там (но не се извиква).
Ако секцията за отвиване имаше затваряне, което беше извикано, когато анимацията завърши, бих могъл да актуализирам Home там (но не е, доколкото мога да намеря).
Така че засега извиквам ръчно dismissViewControllerAnimated
и използвам затварянето там, за да опресня домашния контролер...
if let nc = self.presentingViewController as? UINavigationController, home = nc.topViewController as? HomeViewController {
self.dismissViewControllerAnimated(true, completion: { _ in
self.model.deleteEntities()
home.refresh()
})
}
Което работи, но ми се струва грешно (предполагам, защото смятам, че е „лошо“ контролерът Detail да знае за контролера Home). Някакви съвети кой би бил по-добрият подход?