Pregunta

¿Cómo detecto cuando se inicia una aplicación iOS por primera vez?

¿Fue útil?

Solución

Más o menos lo que dijeron Marc y Chris, aunque prefiero cambiar el valor cuando la aplicación se cierra en caso de que haya varias áreas de la aplicación que necesiten saber al respecto. En código:

// -applicationDidFinishLaunching:
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
// to check it:
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"];
// -applicationWillTerminate:
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];

Otros consejos

Me doy cuenta de que esta pregunta es bastante antigua, pero la utilicé para encontrar el método one para detectar el primer inicio después de una " instalación nueva " (frente al primer inicio después de una actualización / degradación) y pensé en compartir el código aquí para futuros espectadores en caso de que sea útil.

// Get current version ("Bundle Version") from the default Info.plist file
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"];
if (prevStartupVersions == nil) 
{
    // Starting up for first time with NO pre-existing installs (e.g., fresh 
    // install of some version)
    [self firstStartAfterFreshInstall];
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"];
}
else
{
    if (![prevStartupVersions containsObject:currentVersion]) 
    {
        // Starting up for first time with this version of the app. This
        // means a different version of the app was alread installed once 
        // and started.
        [self firstStartAfterUpgradeDowngrade];
        NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions];
        [updatedPrevStartVersions addObject:currentVersion];
        [[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"];
    }
}

// Save changes to disk
[[NSUserDefaults standardUserDefaults] synchronize];

Normalmente uso el número de versión de la aplicación en lugar de un booleano para el primer valor de lanzamiento en los valores predeterminados del usuario. De esa manera, puede distinguir entre el primer lanzamiento de una nueva instalación y el primer lanzamiento de una actualización. Puede ser útil en futuras versiones ...

Este es un acceso directo realmente simple, pero descubrí que los pares de valores de clave NSUserDefault siempre son NULL la primera vez que ejecuta una aplicación, así que

// Check to see if its the first time
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
   [[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
}

y coloque este código en el awakeFromNib del controlador de vista que aparece cuando se inicia su aplicación. No sé si alguna de las otras respuestas funciona para su problema, pero así es como lo resolví.

Puede establecer un valor booleano en los valores predeterminados del usuario para hacer esto. Establezca la clave en falso cuando llame a registerDefaults: , y luego configúrelo en true cámbielo a true después de que haya mostrado su pantalla de ayuda inicial o lo que sea que necesite hacer.

Si tiene un archivo de datos persistente que siempre se guarda después de que se cierra la aplicación, comprobar si existe existe otra forma.

Guárdelo como preferencia de usuario , por ejemplo, had_first_launch, establecido en verdadero en el inicio, solo será falso la primera vez ...

Esto no funcionará correctamente si desea detectar en otros lugares del código si se inicia por primera vez. La " applicationWillTerminate " no funcionará desde iOS 4.0 debido a la multitarea. Este enlace proporciona una buena solución: http://mobiledevblog.metalcompass.com/?p=43

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top