wake-up-neo.net

Wie kann ich die NSUserDefaults-Daten im iPhone-Simulator zurücksetzen?

Ich habe meiner App NSUserDefault-Datenabruf hinzugefügt, was ziemlich schön ist. Zum Testen möchte ich jedoch alle Daten, die ich zur Standarddatenbank hinzugefügt habe, zurücksetzen, sodass sich alles in dem Zustand befindet, in dem der Benutzer die App zum ersten Mal startet.

Ich habe versucht anzurufen:

[NSUserDefaults resetStandardUserDefaults];

aber das tut nichts. Die Standardeinstellungen bleiben gespeichert und können abgerufen werden.

50
Thanks

Der einfachste Weg ist, die App aus dem Simulator zu entfernen - so wie Sie sie von einem echten Telefon entfernen würden, indem Sie (klickt) und halten, bis die Symbole zu vibrieren beginnen. Dadurch werden alle App-Daten entfernt, und bei der nächsten Installation von Xcode ist es wie beim ersten Mal.

Wenn Sie weitere App-Daten haben, die Sie aufbewahren müssen, haben Sie mehrere Optionen.

Eine Möglichkeit wäre, einen Debug-Code zu haben, der removeObjectForKey: für jeden Ihrer Standardschlüssel aufruft.

Die andere besteht darin, das Verzeichnis zu finden, in dem die Simulatorkopie installiert ist, und die Datei mit den Einstellungen zu entfernen. So finden Sie die App:

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

Der vollständige Pfad zu Ihrer App enthält ein Verzeichnis, dessen Name eine UUID ist. Suchen Sie in diesem Verzeichnis in Library/Preferences nach der Preferences-Datei. Entfernen Sie das, und die Benutzereinstellungen sind nicht mehr vorhanden.

51
Tom Harrington

Sie möchten NSUserDefaults removePersistentDomainForName. Dadurch werden alle Benutzervorgaben für die Anwendung entfernt:

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

Weitere Informationen zur NSUserDefaults-Klasse finden Sie in den Apple-Dokumenten .

Wenn Sie sich nur um Daten im iOS-Simulator kümmern, können Sie dies alternativ über iOS-Simulator> Inhalt und Einstellungen zurücksetzen.

enter image description here

99
memmons

Sie können herausfinden, was Sie in userdefaults für die App "geschrieben" haben. Sie befinden sich alle in einer Datei Diese .plist-Datei löschen funktioniert

user name/Library/Preferences/com.theAppYouAreHandling.plist
6
Jiulong Zhao

Eigentlich ist dies möglicherweise nicht in jedem Fall geeignet, aber da ich im Simulator keine Informationen zum Wert aufbewahre, setze ich einfach Inhalte und Einstellungen aus dem iPhone-Menü im Simulator selbst zurück.

5
mmc

In Swift 2.0 setzt die folgende 1 Zeile alle NSUserDefaults für eine App zurück:

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

5
dane

Bis Xcode 6 und iOS 8 Simulator wurde der Speicherort der Plist-Datei geändert.

Ich habe die * .plist im folgenden Verzeichnis gefunden:

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

Löschen Sie die gefundene Datei manuell aus Pfad [1] und die NSUserDefaults sind nicht mehr vorhanden.

3
sys4tron

Hier ist die Swift-Version:

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

Im Simulator-Hauptmenü:

Simulator -> Reset Content and Settings...
1
Andrey

Wenn Sie dies uneingeschränkt tun, sollten Sie den Status Ihrer App im aktuellen Simulator beibehalten, anstatt sie bei jedem Ausführen Ihrer Tests unbeabsichtigt zu löschen. Eine Möglichkeit, dies zu tun, besteht einfach darin, die alten Werte für Ihre App-Domäne in setUp() beizubehalten und sie anschließend in tearDown() wiederherzustellen:

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()
    }
}
0
qix

Sie können die removePersistentDomainForName - Methode verwenden, die mit der NSUserDefaults-Klasse verfügbar ist.

Syntax :

- (void)removePersistentDomainForName:(NSString *)domainName

Beispiel:

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