das mag echt NOOB klingen! Ich möchte überprüfen, ob der Benutzer meine Anwendung zum zweiten Mal aufruft, um die von mir verwendete Laufanzahl beizubehalten NSUserDefaults
. Ich habe den folgenden Code in meinem implementiert rootViewController
‚s - viewDidLoad
Methode:
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];
Alles funktioniert einwandfrei, aber das Problem ist, dass beim Deinstallieren (Löschen und erneuten Installieren) der Anwendung gemäß hier und hier die Daten gelöscht werden sollten, dies jedoch nicht der Fall ist und nach der erneuten Installation der App immer noch die vorherigen Daten angezeigt werden. Ich führe meine App auf einem iOS-Simulator mit xCode6-beta aus und ziele auf die Anwendung auf iOS 8 ab
ios
ios-simulator
nsuserdefaults
ios8
xcode6
Reza Shayestehpour
quelle
quelle
NSMutableArray
gespeichert habe, als gespeichert wurdeNSArray
und das Ändern meiner App zum Absturz brachte. .. Ich empfehle, ein zu speichernNSArray
und wenn Sie es später verwenden möchten, um es zuNSMutableArray
verwenden[NSMutableArray arrayWithArray:array];
. Ich hoffe das hilft.Antworten:
Ich denke, das liegt an einem Fehler im iOS8 Beta Simulator.
Das erwartete Verhalten ist, dass beim Löschen der App auch die NSUserDefaults für diese App gelöscht werden.
Eine schnelle und nervige Lösung ist vorerst das Klicken auf iOS Simulator -> Inhalt und Einstellungen zurücksetzen.
Xcode 9.2 mit Simulator 10 weist dieses Problem weiterhin auf. Die Menüoption ist jetzt Hardware. Alle Inhalte und Einstellungen löschen
Ich habe übrigens einen Fehlerbericht eingereicht
quelle
Da das Zurücksetzen von Inhalten und Einstellungen eine nukleare Option ist, können Sie zwei weitere Optionen in Betracht ziehen, bis der Fehler im iOS 8 / Xcode 6 GM-Simulator behoben ist:
Sie können die Plist-Datei, in der sie
NSUserDefaults
gespeichert sind, manuell löschen . Dies befindet sich derzeit unter~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist
Es ist etwas mühsam, unter den UUID-Verzeichnisnamen den richtigen Simulator für die Arbeit zu finden. EDIT : 2014-10-28 20-34-52 Richtiger Pfad:~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist
Sie könnten diese Operation mit plistbuddy "operieren" ( z. B. mithilfe einer Build-Phase zum Ausführen eines Skripts), z
/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist
quelle
Für alle, die vor dem gleichen Problem stehen.
Wenn Sie mehr als eine App unter derselben Gruppe haben und alle App-Gruppen verwenden (EIN unter Funktionen), müssen Sie alle Apps vom Gerät entfernen, damit die Standardeinstellungen des Benutzers gelöscht werden.
Da die Benutzerstandards gemeinsam genutzt werden, wird sie nicht gelöscht, auch wenn sich eine der Apps auf dem Gerät befindet, da diese App die Benutzerstandards verwendet.
quelle
Der Code sollte auf dem Gerät einwandfrei funktionieren. Vielleicht ein paar Fehler im Simulator.
Versuchen Sie, den Inhalt und die Einstellungen für den Simulator zurückzusetzen.
quelle
Es ist ein Fehler, und Sie können NSUserDefaults mit folgendem Code löschen
quelle
Während dies immer noch ein Fehler ist, könnte eine andere Option darin bestehen, die spezifischen Schlüssel in NSUserDefaults zu entfernen. Meistens kümmern wir uns beim Testen / Entwickeln nur um ein paar Schlüssel und nicht um alles in NSUserDefaults. Wenn Sie sich nur für ein paar Schlüssel interessieren, dann schlage ich vor, Folgendes hinzuzufügen
removeObjectForKey
:Durch Hinzufügen wird
removeObjectForKey
der erste Lauf der App simuliert, durch Auskommentieren werden alle nachfolgenden App-Ausführungen simuliert.quelle
In meinem Fall habe ich die * .plist im folgenden Verzeichnis gefunden:
[1] / Users / SOME-USERNAME / Library / Developer / CoreSimulator / Devices / SOME-DEVICE-ID /data/Library/Preferences/SP.UserDefaultsTest.plist
Problem: Löschen der App in xCode 6 (iOS 8-Simulator), aber die Datei bleibt wie oben erwähnt auf der Festplatte.
Lösung: Löschen Sie die gefundene Datei manuell aus Pfad [1], und die NSUserDefaults sind nicht mehr vorhanden.
Das nervige Zurücksetzen des Simulators ist also nicht mehr erforderlich.
quelle