Всем привет! Прошу помощи. Имеется три ViewController-а(+таблица/картинки/кнопки и тд). Переход осуществляемся через tabbar. Данные для заполнения получаю с сервера (через Alamofire). Для каждого контроллера свой запрос. Возник такой вопрос: каким образом выполнить синхронизацию между тремя контроллерами? т.е. на пример на одном контролере я нажимаю кнопку “лайк”, соответсвенно кнопка меняет цвет и счетчик лайков увеличивается, но при переходе на другие контроллеры для данной ячейки значения стоят старые (что не удивительно). Пробовал через viewWillApper, но как-то не помогло. По идее при переходе нужно полностью обновлять/сбрасывать контролер, чтобы повторно шел запрос на сервер и обрисовывались ячейки, но как это сделать ума не приложу. Или можно как-то иначе решить проблему?
Просьба помочь новичку. TabBar + ViewController
Создайте в TabBarController’e протокол для обновления его VC.
Метод протокола будет принимать один объект с данными.
Все ваши 3 VC подпишите под данный протокол.
Реализуйте в каждом VC метод протокола и делайте необходимое обновление UI на основе полученных данных.
Так же в каждом VC при каком-то действии (отправке запроса и получении ответа), вызывайте метод делегата у TabBarController’a и передавайте туда полученные данные.
Таким образом все 3 VC смогут обновиться за счет одного запроса.
Спасибо, буду копать в этом направлении. А случайно нет как-нибудь практических примеров?
TabBarController
class TBController: ... {
func viewDidLoad() {
// инициализация ваших VC
}
func syncVC(with data: AnyObject) {
VC1.updateView(with: data)
VC2.updateView(with: data)
VC3.updateView(with: data)
}
}
Ваши VC (VC1, VC2, VC3)
class ViewController: ... {
func updateView(with data: AnyObject) {
//обновляете ваши таблицы и прочее
}
func alamofireAction() {
//любой запрос
//при получении ответа, в замыкании вызываете метод TBController'a
Alamofire.request().response() {
//обработка данных
if let tbc = tabBarController as? TBController {
tbc.syncVC(with: data)
}
}
}
}
Примерно как-то так.
Изначально с делегатом я чет перемудрил. Но тоже можно.
В таббаре каждый контроллер существует отдельно. Сделай сервис который будет обрабатывать данные и хранить модель. А контроллеры будут к нему обращаться и запрашивать значения. И выводить на экран.
Если тебе надо сохранять данные, то тогда реалм прикручивай. Если у тебя данные статичные и сохранять изменения не надо - ничего прикручивать не нужно. Просто делаешь сервис или провайдер, который будет данными управлять.
не надо кордату - у вас явно простые модели и заморачиваться с кордатой себе дороже… ))
сохраняй пришедшие данный в Реалм или в локальный файл yourfilename.plist на устройстве (инструкция) - это несложно, писать модель в файл. Его потом можно и бекапить в айклауд если нужно