2017-04-08 1 views
0

Vous vous demandez si quelqu'un a rencontré ce problème?NSUserDefaults dans iOS disparaît de manière aléatoire et réapparaît

Je développe actuellement une application pour iOS utilisant Objective-C. Parfois mes données dans NSUserDefaults seront manquantes après avoir compilé l'application.

Mais si je l'ignore et que je recompile l'application, les données réapparaissent soudainement.

J'ai déjà synchronisé à plusieurs endroits (pas dans toutes les clés, mais seulement dans plusieurs endroits).

Si quelqu'un a rencontré ce problème avant que j'espère que vous pouvez partager comment gérer ce problème.

P.S. J'ai besoin d'un stockage pour enregistrer un objet particulier afin de pouvoir le récupérer lorsque l'application sera rouverte.

Edité pour ajouter le code

NSString *enPIN = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@", [enterField.text md5]]]; 

[[NSUserDefaults standardUserDefaults] setObject:enPIN forKey:@"pin"]; 
[[NSUserDefaults standardUserDefaults]synchronize]; 

NSLog(@"check pin %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"pin"]); 

L'objet est une chaîne, je hachage à l'aide md5 puis le stocker dans nsuserdefault, si elle ne hasard dissapearing peut-être son pas bizarre, mais son aussi reapearing à nouveau après il disparaît si je recompile les applications

+0

Stockez les objets comme indiqué dans le lien de réponse ci-dessous pour les lire et les stocker dans le même état. http://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults –

+0

Veuillez montrer votre code. Testez-vous sur un appareil ou un simulateur? Si un simulateur utilisez-vous toujours le même simulateur? 'synchroniser' Ian n'est pas nécessaire. – Paulw11

+0

@ Paulw11 salut paul j'ai édité ma question pour ajouter le code, im n'utilisant pas de simulateur, im utilisant un appareil, ipad mini2, –

Répondre

0

Vérifiez si vos valeurs par défaut utilisent seulement la valeur de chaîne ou bool ou tel.

Si vous utilisez un objet avec classe (clé et paramètres) comme NSObject pour stocker par défaut, je préfère que vous fassiez le codage et le décodage avant d'enregistrer et de récupérer les valeurs. En outre, si vous stockez un NSDictionary, vérifiez si la valeur de l'objet dans ce dictionnaire n'est autre que Bool, String, s'il existe également une classe ou une référence NSObject, vous pouvez rencontrer le même problème.

Référez-vous à stackoverflow link pour savoir comment encoder des objets avant de les stocker dans NSUserDefaults.

Enfin [paramètres par défaut synchroniser] appel obligatoire sur viewwilldisappear ou immédiatement après le stockage de la nouvelle valeur quel que soit votre implémentation.

Espérons que cela aide.

+0

Vous n'avez pas besoin d'appeler 'synchronize' – Paulw11

+0

bonjour, j'ai édité ma question pour ajouter mon code, j'ai seulement mis une chaîne md5 hachée dedans, et je l'ai synchronisée, la chose étrange est, après sa disparition, je la compile à nouveau, et la valeur réapparaîtra correctement. –

+0

Pouvez-vous faire ce qui suit, NSString * enPIN = [enterField.text md5]; [[NSUserDefaults standardUserDefaults] setValue: enPIN forKey: @ "pin"]; [[NSUserDefaults standardUserDefaults] synchronize]; NSLog (@ "cocher la broche% @", [[NSUserDefaults standardUserDefaults] valueForKey: @ "broche"]); Mettez les journaux dans Didfinishlaunchwith Option à lire et Appwill terminer la fonction et vérifier la valeur est stockée au moment de la sortie et la saisie de l'application. –

0

J'ai eu un problème similaire, l'autre jour avec NSUserDefaults

Pas tout à fait sûr de ce qui cause, mais il était dû à un bug dans Xcode. J'ai été capable de résoudre le problème sans changer mon code du tout. J'ai simplement nettoyé le projet (CMD-Shift-K) et redémarré mon ordinateur, puis cela a très bien fonctionné. Cela vaut la peine d'essayer

Avez-vous des messages d'erreur dans la console?

+0

Je n'ai pas reçu de message d'erreur dans la console, je l'ai enregistré avec succès dans NSUserDefaults, et parfois disparaître de manière aléatoire, et réapparaître si je le recompile juste après sa disparition. Je consigne la valeur pendant que tha apps est ouvert, et il disparaît déjà –