¿Hay alguna forma de ejecutar una función solo una vez (cuando la aplicación se actualiza o instala)? No puedo usar run script porque debería usar la función objetivo c.Ejecutar la función solo en la primera ejecución ios
Respuesta
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if (![userDefaults valueForKey:@"version"])
{
// CALL your Function;
// Adding version number to NSUserDefaults for first version:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}
if ([[NSUserDefaults standardUserDefaults] floatForKey:@"version"] == [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue])
{
/// Same Version so dont run the function
}
else
{
// Call Your Function;
// Update version number to NSUserDefaults for other versions:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}
Puede crear una clave de valor BOOL (por ejemplo, isFirstLaunch = NO
) en su NSUserDefaults
y ajústelo en SÍ después de haber ejecutado la función.
Si desea ejecutarlo cada vez que el usuario inicie la aplicación, deberá establecer la clave a su valor predeterminado antes de que la aplicación exista (es decir, reiníciela en el método -applicationWillTerminate:
en AppDelegate).
Si desea ejecutar código cuando la aplicación está bien instala por primera vez o después de cada actualización, entonces podía leer la versión actual de la aplicación de su paquete
CGFloat currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue];
y escribir que los valores predeterminados de usuario después de ha ejecutado el código.
[[NSUserDefaults standardUserDefaults] setFloat:currentVersion
forKey:kLastVersionThatExecutedMyCodeKey];
La próxima vez que inicie su aplicación, compare el valor de los valores predeterminados del usuario con la versión del paquete. Si la versión del paquete ha cambiado, la aplicación se actualizó, lo que significa que debe volver a ejecutar el código y escribir la nueva versión en los valores predeterminados del usuario.
Debe ser (Missing las comillas) -> [[NSUserDefaults standardUserDefaults] setFloat: currentVersion forKey: @ "kLastVersionThatExecutedMyCodeKey"]; – mikemike396
@ Pyraego.com Prefijo de una variable con una 'k' pequeña es una convención común para indicar que es una constante. Los marcos de Apple lo usan en muchos lugares. 'kLastVersionThatExecutedMyCodeKey' se supone que es una variable, no una cadena en sí misma. –
¡Interesante! Bueno saber. Perdón por la confusion. – mikemike396
Esta es la conversión de Swift Bhupendra's answer:
let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary // Fetch info.plist as a Dictionary
let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as NSString
let val: Float = temp.floatValue
var userDefaults = NSUserDefaults()
if userDefaults.valueForKey("version") == nil {
// Call function
// Adding version number to NSUserDefaults for first version
userDefaults.setFloat(val, forKey: "version")
}
if NSUserDefaults().floatForKey("version") == val {
// Same Version so dont run the function
} else {
// Call function
// Update version number to NSUserDefaults for other versions
userDefaults.setFloat(val, forKey: "version")
}
Ésta es la versión Swift2.0 de respuesta de Bhupendra, si alguien lo necesita!
let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary
//Fetch info.plist as a Dictionary
let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as! NSString
let val: Float = temp.floatValue
let userDefaults = NSUserDefaults()
if userDefaults.valueForKey("version") == nil {
userDefaults.setFloat(val, forKey: "version")
}
if NSUserDefaults().floatForKey("version") == val {
//if it is the same version, don't run the code
}
else {
userDefaults.setFloat(val, forKey: "version")
}
}
- 1. ¿Ejecución de la función asincrónica?
- 2. vba regex solo devuelve la primera coincidencia
- 3. Detectando la primera ejecución de una aplicación
- 4. La animación de diseño no funciona en la primera ejecución
- 5. Android: Ejecutando código solo en la primera ejecución y en cada actualización posterior
- 6. error al ejecutar cpan la primera vez
- 7. SSRS solo muestra la primera fila
- 8. python capitalizar la primera letra solo
- 9. Bootstrap Typeahead solo mostrando la primera letra
- 10. Preferencias compartidas solo guardadas la primera vez
- 11. Matplotlib: figlegend solo imprime la primera letra
- 12. Reemplazar solo la primera coincidencia utilizando preg_replace
- 13. La primera XMLHttpRequest falla pero solo en IE9
- 14. Función SQL agregada para obtener solo la primera de cada grupo
- 15. Imagen de la primera página en pdf ios sdk
- 16. La cuadrícula de paginación ExtJS filtra solo la primera página
- 17. ¿Puedo ejecutar una actividad de Android solo la primera vez que se abre una aplicación?
- 18. ¿Cómo puedo ejecutar el código de inicialización para una función de generador inmediatamente, en lugar de ejecutar la primera llamada?
- 19. Cómo leer solo la primera línea de un archivo
- 20. pasar la función en json y ejecutar
- 21. Reemplazar solo la primera coincidencia en varios archivos con Perl
- 22. ActionScript 3 .replace() solo reemplaza la primera instancia
- 23. ¿Cómo grafico la primera derivada de la función de suavizado?
- 24. ¿Se puede ejecutar una función en la inicialización en c?
- 25. jQuery - $ .each encontrar si la primera ejecución de $ .each
- 26. Demora en la ejecución de la función de JavaScript
- 27. Django sur: volver a ejecutar la primera migración
- 28. excelente primera experiencia de ejecución
- 29. ¿Cómo usar la función "abrir en ..." para la aplicación iOS?
- 30. primera función desconocida
gracias Bhupendra – Eldhose
eres bienvenido :) – Bhupendra
Cracking cosas @Bhupendra, estaba tratando de escribir un archivo de configuración plist en la tienda de documentos de los usuarios, tu manera es mucho mejor – MagicalArmchair