cela peut sembler vrai NOOB! Je veux vérifier si c'est la deuxième fois que l'utilisateur entre dans mon application, afin de conserver le nombre d'exécutions que j'utilise NSUserDefaults
. J'ai mis en œuvre le code suivant dans mon rootViewController
de » viewDidLoad
méthode:
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];
tout fonctionne bien, mais le problème est que lorsque je désinstalle (supprime et réinstalle) l'application selon ici et ici, les données doivent être effacées, mais ce n'est pas le cas et après la réinstallation de l'application, les données précédentes apparaissent toujours. J'exécute mon application sur un simulateur iOS en utilisant xCode6-beta et en ciblant l'application sur iOS 8
ios
ios-simulator
nsuserdefaults
ios8
xcode6
Reza Shayestehpour
la source
la source
NSMutableArray
qu'il a été enregistré en tant queNSArray
et que sa modification a fait planter mon application. .. Je recommande d'enregistrer unNSArray
et lorsque vous souhaitez l'utiliser plus tard, le cast enNSMutableArray
utilisation[NSMutableArray arrayWithArray:array];
. J'espère que cela aide.Réponses:
Je pense que cela est dû à un bogue dans le simulateur bêta d'iOS8.
Le comportement attendu est que lorsque l'application est supprimée, les NSUserDefaults de cette application sont également supprimés.
Une solution rapide et ennuyeuse pour l'instant consiste à cliquer sur iOS Simulator -> Réinitialiser le contenu et les paramètres.
Xcode 9.2 avec Simulator 10 présente toujours ce problème. L'option de menu est maintenant Matériel .. Effacer tout le contenu et les paramètres
J'ai soumis un rapport de bogue btw
la source
Étant donné que la réinitialisation du contenu et des paramètres est une option nucléaire, vous pouvez envisager deux autres options jusqu'à ce que le bogue du simulateur iOS 8 / Xcode 6 GM soit résolu:
Vous pouvez supprimer manuellement le fichier plist dans lequel
NSUserDefaults
sont stockés. Il se trouve actuellement à~/Library/Developer/CoreSimulator/Devices/*some_device_id*/Library/Preferences/com.yourcompany.yourapp.plist
Il est un peu fastidieux de trouver le bon simulateur avec lequel travailler parmi les noms de répertoire UUID. EDIT : 2014-10-28 20-34-52 Chemin correct:~/Library/Developer/CoreSimulator/Devices/*some_device_id*/data/Library/Preferences/com.yourcompany.yourapp.plist
Vous pouvez effectuer une "chirurgie" sur ce plist (en utilisant peut-être une phase de construction de script run) en utilisant plistbuddy, par exemple
/usr/libexec/plistbuddy -c "Set :BSDidMoveSqliteDb 0" path_to_plist
la source
Pour toute personne confrontée au même problème.
Si vous avez plus d'une application dans le même groupe et que toutes utilisent des groupes d'applications (ACTIVÉ sous fonctionnalités), vous devrez supprimer toutes les applications de l'appareil pour que les valeurs par défaut de l'utilisateur soient effacées.
Étant donné que les valeurs par défaut de l'utilisateur sont partagées, même si l'une des applications est sur l'appareil, elle ne sera pas supprimée, car cette application utilisera les valeurs par défaut de l'utilisateur.
la source
Le code devrait fonctionner correctement sur l'appareil. Peut-être quelques bugs dans le simulateur.
Essayez de réinitialiser le contenu et les paramètres du simulateur.
la source
c'est un bogue, et vous pouvez supprimer NSUserDefaults avec le code suivant
la source
Bien que ce soit toujours un bogue, une autre option pourrait être de supprimer la ou les clés spécifiques dans NSUserDefaults. La plupart du temps, lors du test / développement, nous ne nous soucions que de quelques clés et pas de tout dans NSUserDefaults. Si vous ne vous souciez que de quelques clés, je vous propose d'ajouter
removeObjectForKey
:L'ajout
removeObjectForKey
simule la première exécution de l'application, la mise en commentaire simulera toutes les exécutions ultérieures de l'application.la source
Dans mon cas, j'ai trouvé le * .plist dans le répertoire suivant:
[1] / Users / SOME-USERNAME / Library / Developer / CoreSimulator / Devices / SOME-DEVICE-ID /data/Library/Preferences/SP.UserDefaultsTest.plist
Problème: suppression de l'application dans xCode 6 (simulateur iOS 8) mais le fichier reste sur le disque comme mentionné ci-dessus.
Solution: la suppression manuelle du fichier localisé du chemin [1] et les NSUserDefaults ont disparu.
Ainsi, la manière ennuyeuse de réinitialiser le simulateur n'est plus nécessaire.
la source