standard from iphone ios cocoa-touch uikit nsuserdefaults

iphone - from - swift 4 userdefaults standard



¿Cómo puedo restablecer los datos de NSUserDefaults en el simulador de iPhone? (10)

Agregué la recuperación de datos NSUserDefault a mi aplicación, lo cual es bastante bueno. Pero para las pruebas me gustaría restablecer todos los datos que agregué a la base de datos predeterminada, para que todo esté en el estado en que el usuario inicia la aplicación por primera vez.

Traté de llamar:

[NSUserDefaults resetStandardUserDefaults];

pero eso no hace nada. Los valores predeterminados aún se guardan y se pueden recuperar.


Aquí está la versión rápida:

let domainName = NSBundle.mainBundle().bundleIdentifier! NSUserDefaults.standardUserDefaults().removePersistentDomainForName(domainName)


Desea NSUserDefaults removePersistentDomainForName . Esto eliminará todos los valores predeterminados del usuario para la aplicación:

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier]; [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

Para obtener más información sobre la clase NSUserDefaults , consulte los documentos de Apple .

Alternativamente, si todo lo que le preocupa son los datos en el simulador de iOS, puede hacerlo a través de iOS Simulator> Restablecer contenido y configuración .


En Swift 2.0, la siguiente línea 1 restablecerá todos los NSUserDefaults para una aplicación:

NSUserDefaults.standardUserDefaults().removePersistentDomainForName(NSBundle.mainBundle().bundleIdentifier!)


En el menú superior del simulador:

Simulator -> Reset Content and Settings...


En realidad, esto puede no ser adecuado en todas las circunstancias, pero como no guardo ninguna información de valor en el simulador, simplemente restablezco contenido y configuraciones desde el menú del iPhone, desde el propio simulador.


Hasta xCode 6 y iOS8 Simulator, la ubicación del archivo plist cambió.

Encontré el * .plist en el siguiente directorio:

[1] /Users/SOME-USERNAME/Library/Developer/CoreSimulator/Devices/SOME-DEVICE-ID/data/Library/Preferences/SP.UserDefaultsTest.plist

Eliminar manualmente el archivo ubicado de la ruta [1] y los NSUserDefaults desaparecidos.


La forma más fácil es eliminar la aplicación del simulador, al igual que lo eliminarías de un teléfono real, tocando (hacer clic) y manteniéndolo hasta que los iconos comiencen a vibrar. Eso elimina todos los datos de la aplicación, y la próxima vez que instales desde Xcode es como la primera vez.

Si tiene otros datos de la aplicación que necesita conservar, tiene un par de opciones.

Una forma sería tener algún código de depuración que invoque removeObjectForKey: en cada una de las claves predeterminadas.

La otra es encontrar el directorio donde está instalada la copia del simulador y eliminar el archivo que contiene las preferencias. Use esto para encontrar la aplicación:

ls -ld ~/Library/Application/ Support/iPhone/ Simulator/User/Applications/*/*.app

La ruta completa a su aplicación contendrá un directorio cuyo nombre es un UUID. En ese directorio, busque en Biblioteca / Preferencias el archivo de preferencias. Quítelo y las preferencias del usuario desaparecerán.


Puede encontrar lo que ha "escrito" a los valores predeterminados del usuario para la aplicación. Todo está dentro de un archivo. Eliminar este archivo .plist funciona:

user name/Library/Preferences/com.theAppYouAreHandling.plist


Puede usar el método removePersistentDomainForName disponible con NSUserDefaults Class.

Sintaxis:

- (void)removePersistentDomainForName:(NSString *)domainName

Ejemplo:

NSString *strAppBundleId = [[NSBundle mainBundle] bundleIdentifier]; [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:strAppBundleId];


Si está haciendo esto en una prueba unitaria, es posible que desee mantener el estado de su aplicación en el simulador actual en lugar de borrarla inadvertidamente cada vez que ejecute los tests de su unidad. Una forma de hacerlo es simplemente aferrarse a los valores anteriores para el dominio de su aplicación en setUp() y luego restaurarlos en tearDown() :

class MyClass_Tests: XCTestCase { static let domainName = Bundle.main.bundleIdentifier! static var oldUserDefaults: [String : Any]? override class func setUp() { super.setUp() // Hang onto this so we don''t inadvertently wipe the app''s state while running tests. oldUserDefaults = UserDefaults.standard.persistentDomain(forName: domainName) } override class func tearDown() { // Restore the old values. UserDefaults.standard.setPersistentDomain(oldUserDefaults!, forName: domainName) super.tearDown() } override func setUp() { super.setUp() // Wipe the state for each test. UserDefaults.standard.removePersistentDomain(forName: MyClass_Tests.domainName) } override func tearDown() { super.tearDown() } }