[решено] Вызов из AppDelegate функции, которая находится в ViewController-e


#1

:hugs:

Есть функция refreshAndUpdate() и она находится в ViewController-e, а мне её нужно вызвать перед тем, как свернется приложение. Я сделала это из AppDelegate вот так, но какое-то странное чувство появилось, что я :blonde_woman: и чё-то намудрила …

func applicationDidEnterBackground(_ application: UIApplication) {

        self.saveContext()
        
        let viewController = self.window?.rootViewController as! ViewController
        viewController.refreshAndUpdate()

    }

Ткните носом в ошибки )) пожалуйста :pray:


#2

Можно так.
Я предпочитаю делать это через NotificationCenter.


#3

А почему через NotificationCenter?


#4

не нужно все время дергать rootViewController


#5

А почему это вредно?


#6

лишняя нарузка, хоть и не заметная
+ не нужно будет копаться в иерархии NavigationController’a, если нужно что-то вызвать в дочернем VC

тем более как с NotificationCenter работать вы уже знаете + код будет чище и красивее


#7

Вот в том и проблема, что я совсем в него не могу въехать блин …


#8

А можете помочь с примером, вот таким самым базовым, для Чайника, чтобы я могла как-то начать в голове это раскручивать, пересмотрела кучу примеров, но у всех они ну ооооочень разные, я не смогла найти какую-то общую закономерность, чтобы зацепиться за неё. Наверное, это самое сложное, именно логически понимать, как они работают под капотом, чтобы не ctrl+c/v, а я смогла сама написать. Вот я сейчас разобралась немного и меня сториБорд бесит, руками и кодом как-то проще и понятнее создавать всё, чем через визуальный редактор. Я хочу вообще в итоге придти к тому, чтобы можно было удалить всё из сториборда.


#9

Они не могут быть разные, т.к. это один стандарт для всех.
.post - послать уведомление (вызываете к примеру в appDelegate)
.addObserver - подписаться на уведомление (вызываете в VC viewDidLoad)
.removeObserver - удалить подписанное уведомление (вызываете в viewWillDisappear)

на каждое уведомление можно подписать разное кол-во контроллеров
на этом базовый курс окончен


#10

Уже что-то, спасибо!

А вот такой вопрос, я правильно понимаю, что если у меня приложение свернуто, либо вообще человек вышел из него, но мне нужно время от времени запускать функцию refreshAndUpdate(), то только через NotificationCenter?


#11

Если приложение свернуто или закрыто, зачем в нем что-то делать?


#12

Ну, например, чтобы проверить, какие на сегодня клиенты и обновить тот же бэйдж на иконке


#13

Бэйдж обновиться автоматом при получении PushNotification.
Все визуальное внутри приложения трогать не нужно при свернутом или закрытом приложении.

И вообще, это очень трудоемкая часть и обширная.


#14

А если есть дата, но у неё не стоит уведомление по дате, но она должна отобразиться на бейдже, как +1, что пришло её время, а потом я взяла и перенесла дату на неделю позже, как с этим быть, ведь на бейдже должны быть изменения… вот реально сложно всё это.


#15

а я правильно понимаю, что используя NotificationCenter можно делать тот же reloadData при наступлении какой-то даты, даже если у даты нет localnotification?


#16

Все о локальных уведомлениях на русском, автор один из админов swiftbook.ru


#17

:hugs: Вы прямо мысли читаете, буквально пару секунд назад нашла это же ))


#18

У меня сейчас мозги взорвутся)


#19

Я так и не поняла, можно ли это сделать:

а я правильно понимаю, что используя NotificationCenter можно делать тот же reloadData при наступлении какой-то даты, даже если у даты нет localnotification?


#20

затрудняюсь ответить, я таким пока не занимался.