esto puede sonar real NOOB! Quiero verificar si es la segunda vez que el usuario ingresa a mi aplicación, para mantener el recuento de ejecuciones que estoy usando NSUserDefaults
. He implementado el código siguiente en mi rootViewController
's viewDidLoad
método:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSLog(@"hello %ld", (long)[userDefaults integerForKey:@"runCount"]);
if ([userDefaults integerForKey:@"runCount"] != 1) {
//not the 2nd run
[userDefaults setInteger:1 forKey:@"runCount"];
NSLog(@"not 2nd run");
} else {
//second run or more
NSLog(@"2nd run");
}
[userDefaults synchronize];
todo funciona bien, pero el problema es que cuando desinstalo (elimino y reinstalo) la aplicación según aquí y aquí, los datos deben borrarse, pero no es así y después de reinstalar la aplicación, los datos anteriores siguen apareciendo. Estoy ejecutando mi aplicación en un simulador de iOS usando xCode6-beta y apuntándome a la aplicación en iOS 8
ios
ios-simulator
nsuserdefaults
ios8
xcode6
Reza Shayestehpour
fuente
fuente
NSMutableArray
que se guardó como unNSArray
y cambiarlo hizo que mi aplicación fallara. .. Recomiendo guardar unNSArray
y cuando quieras usarlo, luego lo conviertes enNSMutableArray
using[NSMutableArray arrayWithArray:array];
. Espero que eso ayude.Respuestas:
Creo que esto se debe a un error en el simulador Beta de iOS8.
El comportamiento esperado es que cuando se elimina la aplicación, los NSUserDefaults para esa aplicación también se eliminan.
Una solución rápida y molesta por ahora es hacer clic en Simulador de iOS -> Restablecer contenido y configuración.
Xcode 9.2 con Simulator 10 todavía presenta este problema. La opción de menú ahora es Hardware ... Borrar todo el contenido y la configuración
Envié un informe de error por cierto
fuente
Dado que Restablecer contenido y configuración es una opción nuclear, podría considerar otras dos opciones hasta que se solucione el error en el simulador de iOS 8 / Xcode 6 GM:
Puede eliminar manualmente el archivo plist donde
NSUserDefaults
se almacenan. Actualmente se encuentra en~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist
Es un poco tedioso encontrar el simulador adecuado para trabajar entre los nombres de directorio de UUID. EDITAR : 2014-10-28 20-34-52 Ruta correcta:~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist
Podrías realizar una "cirugía" en ese plist (quizás usando una fase de construcción del script de ejecución) usando plistbuddy eg
/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist
fuente
Para cualquiera que enfrente el mismo problema.
Si tiene más de 1 aplicación en el mismo grupo y todas están usando grupos de aplicaciones (ACTIVADO en las capacidades), deberá eliminar todas las aplicaciones del dispositivo para que se borren los valores predeterminados del usuario.
Dado que los valores predeterminados del usuario se comparten, incluso si una de las aplicaciones está en el dispositivo, no se eliminará, ya que esa aplicación utilizará los valores predeterminados del usuario.
fuente
El código debería funcionar bien en el dispositivo. Quizás algunos errores en el simulador.
Intente restablecer los contenidos y la configuración del simulador.
fuente
es un error, y puede eliminar NSUserDefaults con el siguiente código
fuente
Si bien esto sigue siendo un error, otra opción podría ser eliminar las claves específicas en NSUserDefaults. La mayoría de las veces, al probar / desarrollar, solo nos interesan unas pocas claves y no todo en NSUserDefaults. Si solo le importan algunas claves, le propongo agregar
removeObjectForKey
:Agregar
removeObjectForKey
simula la primera ejecución de la aplicación, comentarla simulará todas las ejecuciones posteriores de la aplicación.fuente
En mi caso encontré el * .plist en el siguiente directorio:
[1] / Usuarios / ALGUNO-NOMBRE DE USUARIO / Biblioteca / Desarrollador / CoreSimulator / Dispositivos / ALGUNO-ID-DISPOSITIVO /data/Library/Preferences/SP.UserDefaultsTest.plist
Problema: Eliminando la aplicación en xCode 6 (simulador de iOS 8) pero el archivo permanece en el disco como se mencionó anteriormente.
Solución: Eliminar el archivo ubicado de la ruta [1] manualmente y los valores predeterminados de NSUser desaparecen.
Entonces, la molesta forma de reiniciar el simulador ya no es necesaria.
fuente