Eu tenho o UIApplicationDelegate
protocolo na minha classe principal AppDelegate.m, com o applicationDidBecomeActive
método definido.
Quero chamar um método quando o aplicativo retornar do plano de fundo, mas o método está em outro controlador de exibição. Como posso verificar qual controlador de exibição está sendo exibido no applicationDidBecomeActive
método e fazer uma chamada para um método dentro desse controlador?
NSNotificationCenter
. Obrigado!Swift 3, 4 Equivalente:
adicionando observador
removendo observador
ligue de volta
fonte
viewDidLoad
ouviewWillAppear:animated
por exemplo. E você pode remover um observador quando há notificações necessidade mais longos, ou quando sua instância observador vai ser desalocado no método deinitSwift 2 Equivalente :
fonte
removeObserver
no Swift:deinit
método.Swift 4.2
Adicionar observador-
Remova o observador
Lidar com evento
fonte
Com o Swift 4, a Apple aconselha, por meio de um novo aviso do compilador, que evitamos o uso
#selector
nesse cenário. A seguir, é uma maneira muito mais segura de fazer isso:Primeiro, crie uma var lenta que possa ser usada pela notificação:
Se você precisar que a notificação real seja incluída, substitua
_
pornotification
.Em seguida, configuramos a notificação para observar a ativação do aplicativo.
A grande mudança aqui é que, em vez de chamar a
#selector
, agora chamamos o var criado acima. Isso pode eliminar situações nas quais você obtém falhas inválidas no seletor.Finalmente, removemos o observador.
fonte
#selector
pode chamar um método declarado como um@objc
atributo na Swift 4.removeObserver(self
porque o self não foi atribuído ao adicionar observador. Você deverialet observer = NotificationCenter.default.addObserver
entãoremoveObserver(observer
@objc
. No entanto, ao tentar, recebo um aviso no console (Xcode 11.3.1 (11C504), Swift 13.3): Não é possível finalizar a BackgroundTask: não existe tarefa em segundo plano com o identificador. Mesmo se eu salvar o observador em uma variável como NSObjectProtocol.@objc
variante.Swift 5
fonte
A maneira da combinação:
fonte