quitar precio pencil musica modo descargar desactivar apple aleatorio iphone objective-c ios cocoa-touch uiapplicationdelegate

iphone - precio - ios 12 descargar



ApplicationDidBecomeActive se llama dos veces (11)

¿Es posible que haya creado una instancia de su clase en Interface Builder Y en su código de AppDelegate, tal vez?

Mi método de delegado de applicationDidBecomeActive: se llama dos veces por primera vez al iniciar la aplicación. Tengo una parte del código que quiero ejecutar solo una vez y que he puesto en applicationDidBecomeActive:

¿Qué tengo que hacer?


Actualmente estoy viendo dobles notificaciones. Está sucediendo porque el código de inicio de mi AppDelegate se llama dos veces. Se llama una vez cuando main () hace [[NSBundle mainBundle] loadNibNamed: @ Propietario de "MainMenu": application topLevelObjects: & tl] (es decir, cuando se carga el archivo .XIB), porque el archivo .XIB está configurando FirstResponder para mi AppDelegate personalizado, y luego se vuelve a llamar cuando main () llama [[myAppDelegate alloc] init].

El código de inicio es lo que el addObserver llama, por lo que se están configurando dos observadores para cada notificación que me importa, por lo que mis notificaciones se llaman dos veces.

Soy un programador novato de OS X, así que todavía no estoy seguro de cuál es la mejor manera de resolver estos dos, pero quería publicarlo aquí en caso de que sea de ayuda para otros, otro lugar donde buscar.


Con Xcode 6 hay una nueva razón por la que esto puede suceder: cuando inicias una aplicación en un simulador de tamaño variable, se llamará dos veces a applicationDidBecomeActive :. Inicia la aplicación con la clase de tamaño por defecto y luego aplica el tamaño que usó por última vez, incluso si estaba usando los valores predeterminados. Cada vez que se aplica un cambio en la clase de tamaño, se llama a applicationDidBecomeActive :.


Cuando la aplicación se inicia por primera vez, llama secuencialmente

  1. didFinishLaunchingWithOptions
  2. applicationDidBecomeActive ( dos veces )

Cuando abrimos el Centro de Control solo llama,

applicationDidBecomeActive

Cuando la aplicación viene del fondo al primer plano, llama secuencialmente

  1. applicationWillEnterForeground
  2. applicationDidBecomeActive

Esto se debe a la ubicación o alerta de notificación de inserción.

Después de que la ubicación nativa / la notificación de inserción haya sido descartada, se llamará applicationDidBecomeActive


No sé si esto ayudará, pero tuve el mismo problema con una aplicación totalmente simple que no usa los Servicios de Localización, y descubrí que es una ilusión. Mira los mensajes de registro que tengo:

2012-12-22 10:47:45.329 Bizarro[10416:907] start applicationDidBecomeActive: 2012-12-22 10:47:45.333 Bizarro[10416:907] end applicationDidBecomeActive: 2012-12-22 10:47:45.329 Bizarro[10416:907] start applicationDidBecomeActive: 2012-12-22 10:47:45.333 Bizarro[10416:907] end applicationDidBecomeActive:

Mira de cerca. Mira los tiempos . Los mensajes primero y tercero tienen el mismo tiempo. Los mensajes segundo y cuarto tienen el mismo tiempo. ¡Son los mismos mensajes! Es un error de Xcode; No tiene nada que ver con mi código. Xcode está reportando los mismos mensajes de registro dos veces.

En mi caso, pude evitar esto desactivando todos los comportamientos para ejecutar -> Genera resultados.


Qué pasa:

  • Incremento en applicationDidBecomeActive
  • Disminuye los eventos de devolución de llamada de solicitudes de permisos u otras alertas que activan otro applicationDidBecomeActive cuando se cierra.

Si desea llamar a su código solo una vez cuando la aplicación se activa, intente llamarlo desde dos métodos. 1. didFinishLaunchingWithOptions 2. applicationWillEnterForeground

En lugar de llamarlo solo desde applicationDidBecomeActive.


Si tiene el código al que desea llamar solo una vez cuando se inicia la aplicación, use

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

en lugar.

De lo contrario, se llamará a applicationDidBecomeActive cuando su aplicación vuelva a estar activa, por lo que no solo significa el doble que en su caso, sino cada vez que el usuario vuelva a su aplicación después de cambiar a otra.


Si usa RxSwift, entonces puede limitar el evento de la aplicación, para que no llame dos veces en el mismo segundo:

NotificationCenter.default.rx.notification(Notification.Name.UIApplicationDidBecomeActive) .throttle(1, scheduler: MainScheduler.instance) .subscribe { (event) in self.appEnteredFromBackground() }.disposed(by: disposeBag) private func appEnteredFromBackground() { Analytics.trackPageView(withScreen: .home) dataStore.checkIfAllowingRides() }

Puse este código en mi controlador de vista real donde se supone que la lógica debe ocurrir en ApplicationDidBecomeActive.


Tengo el problema Estoy usando servicios de localización. Al iniciar por primera vez después de tocar "OK" en la alerta de servicios de ubicación, se llama a mi aplicaciónDidBecomeActive una vez más, lo que es el comportamiento normal de iOS.