iphone - puedo - itunes
cómo determinar en applicationDidBecomeActive si se trata del lanzamiento inicial de la aplicación de iPhone? (3)
cómo determinar cómo determinar en UIApplicationDidBecomeActiveNotification si se trata del lanzamiento inicial de la aplicación, si es el lanzamiento inicial de la aplicación?
esa es la inicialización de la aplicación, en oposición a los posteriores DidBecomeActive debido a que la aplicación se coloca en segundo plano y luego en primer plano (por ejemplo, el usuario va al calendario y luego vuelve a su aplicación)
En su applicationDidFinishLaunching:withOptions:
ponga esto:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"alreadyLaunched"];
[[NSUserDefaults standardUserDefaults] synchronize];
Luego, en didBecomeActive
:
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"alreadyLaunched"]) {
// is NOT initial launch...
} else {
// is initial launch...
}
FWIW, la respuesta aceptada le dice si la aplicación alguna vez se ha lanzado antes, no si la aplicación se reanuda desde el fondo frente al lanzamiento. Una vez que la clave ya alreadyLaunched
se haya configurado en preferencias, devolverá YES
cuando la aplicación se lance en el futuro (en comparación con la reanudación desde el fondo).
Para detectar si la aplicación se ha reanudado desde el fondo, no es necesario que agregue nada a las preferencias. Más bien, haga lo siguiente en la implementación de delegado de su aplicación.
// myAppDelegate.m
//
@interface MyAppDelegate()
@property (nonatomic) BOOL activatedFromBackground;
@end
@implementation MyAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.activatedFromBackground = NO;
// your code
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
self.activatedFromBackground = YES;
// your code
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if (self.activatedFromBackground) {
// whatever you want here
}
}
@end
Solía usar el método mencionado por @XJones. Entonces me di cuenta de que tiene un problema potencial: si "el lanzamiento inicial de la aplicación" significa verificar en la aplicaciónDedBecomeActive si se llamó por primera vez desde que se lanzó la aplicación. Porque cuando la aplicación estaba reiniciando la aplicación (ya sea a través de trampolín, cambio de aplicación o URL), se invocará a todos los 3 métodos delegados anteriores. Entonces, la forma más segura es reiniciar self.activatedFromBackground en applicationDidBecomeActive.