¿Cómo puedo detectar cuándo se inicia una aplicación de iOS por primera vez?¿Detecta cuándo se inicia una aplicación de iOS por primera vez?
Respuesta
Más o menos lo que Marc y Chris dijo, aunque yo 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"];
Puede establecer un valor booleano en los valores predeterminados del usuario para hacer esto. Establezca la clave en falso cuando llame al registerDefaults:
, y luego configúrelo en true, cámbielo a verdadero después de que haya mostrado su pantalla de ayuda inicial o lo que sea que deba hacer.
Si tiene un archivo de datos persistentes que siempre se guarda después de que se cierra la aplicación, verificando si existe podría ser de otra manera.
guardarlo como un user preference, por ejemplo had_first_launch, se define como true en el arranque, sólo será falsa en la primera vez ...
normalmente uso el número versión de la aplicación en lugar de un valor booleano para el valor firstLaunch en valores predeterminados del usuario. De esta forma, puede distinguir entre el primer lanzamiento de una nueva instalación y el primer lanzamiento de una actualización. Puede ser útil en versiones futuras ...
Me doy cuenta de que esta pregunta es bastante antigua, pero la utilicé para encontrar un método para detectar el primer inicio después de una "instalación nueva" una actualización/degradación) y pensé que compartiría 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];
im siempre usando este código de "verificar para el primer lanzamiento", ¡así que esta es una gran adición! gracias por el trabajo Clint! – nickthedude
Nunca pensé en detectar actualizaciones y degradaciones. +1. – JoePasq
Es realmente una buena manera de realizar un seguimiento de las versiones. – Ansari
Esto no funcionará correctamente si desea detectar en otros lugares del código si es su primer lanzamiento. El "applicationWillTerminate" no funcionará desde iOS 4.0 debido a la multitarea. este enlace ofrece una buena solución: http://mobiledevblog.metalcompass.com/?p=43
Este es un atajo muy simple, pero me encontré con que NSUserDefault pares de valores clave siempre son nulas la primera vez que se ejecuta una aplicación para
// Check to see if its the first time
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) {
[[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"];
}
y colocar este código en el awakeFromNib del controlador de vista que aparece cuando se inicia la aplicación. No sé si alguna de las otras respuestas funciona para su problema, pero esta es la forma en que lo resolví.
- 1. ¿ApplicationDidFinishLaunching: recibe una llamada cuando la aplicación se actualiza y se inicia por primera vez?
- 2. WebView no puede iniciar sesión cuando la aplicación se inicia por primera vez
- 3. ¿Cuándo aparece por primera vez una capa adornada de WPF?
- 4. ¿Cómo iniciar actividad solo una vez cuando la aplicación se abre por primera vez?
- 5. iCloud no funciona La primera vez que se inicia la aplicación
- 6. ¿Cuándo se crea por primera vez un archivo de preferencias compartidas?
- 7. La mejor manera de verificar si una aplicación de iPhone se está ejecutando por primera vez
- 8. ¿Por qué las animaciones de iOS son lentas la primera vez que se ejecutan?
- 9. Creación de una API en Java por primera vez
- 10. La aplicación iOS se inicia en modo horizontal
- 11. Detectar usuario por primera vez en la aplicación Java
- 12. ¿Detecta si la aplicación (actual) se elimina en iOS?
- 13. ¿Detecta qué versión de una aplicación está instalada en iOS?
- 14. HttpWebRequest se ejecuta lentamente por primera vez dentro de SQLCLR
- 15. Función de iOS que se debe llamar una vez (cuando se inicializa la aplicación)
- 16. Aprendizaje de Oracle por primera vez
- 17. Instalación de Django por primera vez
- 18. Creando un instalador MSI por primera vez
- 19. cache.manifest funciona por primera vez, luego falla
- 20. UIScrollView salta hacia abajo cuando se tocó por primera vez
- 21. ¿Cómo determinar que el usuario ejecuta la aplicación por primera vez?
- 22. La aplicación se bloquea al actualizar la base de datos sqlite por primera vez
- 23. La base de datos de Android se recrea cada vez que se inicia la aplicación
- 24. ¿Cómo configurar postgresql por primera vez?
- 25. ¿Puedo ejecutar una actividad de Android solo la primera vez que se abre una aplicación?
- 26. Mongo Map Reducir por primera vez
- 27. Problema al usar PDO por primera vez
- 28. ¿Detecta cuándo se ejecuta el destructor debido a una excepción?
- 29. Comprobar cuándo se modificó por última vez la contraseña
- 30. ¿Por qué se llama onResume() cuando se inicia una actividad?
¿Las entradas de la base de datos predeterminadas que están asociadas con una aplicación se vacían cuando se desinstala la aplicación? – xyzzycoder
@xyzzycoder: sí –
Con la creación de fondos ahora disponible, '-applicationWillTerminate:' generalmente no se llama cuando el usuario sale de la aplicación. En cambio, se llama '-applicationWillResignActive'. Entonces firstLaunch debe establecerse en ambos métodos. – memmons