Application se bloque lors de l'entreposage de NSArray dans NSUserDefaults
Je ne pouvais pas stocker un NSArray dans NsUserDefaults
. L'application est écrasé
dans cette ligne
[savedData setObject:jsonValue forKey:@"JSONDATA"];
Ci-dessous mon code. et j'ai oublier mon journal d'erreur ci-dessous
NSArray *jsonValue =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSUserDefaults *savedData = [NSUserDefaults standardUserDefaults];
[savedData setObject:jsonValue forKey:@"JSONDATA"];
[savedData synchronize];
Journal des erreurs:
*** Terminating app due to uncaught exception '`NSInvalidArgumentException`', reason: '*** -
[NSUserDefaults setObject:forKey:]: attempt to insert non-property list object <CFBasicHash 0x8c62b10 [0x1d2aec8]>{type = immutable dict, count = 3,
entries =>
Pouvez-vous vérifier le contenu de la jsonValue ?
Je pense que c'est ce que vous êtes à la recherche de: stackoverflow.com/questions/19720611/...
Veuillez NSLog la valeur que vous voulez stocker. Tout ce que nous avons est un message d'erreur qui a été coupée longtemps avant que les choses deviennent intéressantes.
Je pense que c'est ce que vous êtes à la recherche de: stackoverflow.com/questions/19720611/...
Veuillez NSLog la valeur que vous voulez stocker. Tout ce que nous avons est un message d'erreur qui a été coupée longtemps avant que les choses deviennent intéressantes.
OriginalL'auteur iworld | 2014-09-02
Vous devez vous connecter pour publier un commentaire.
Oui ils ne peuvent pas être sauvegardés dans NSUserDefaults.
Je suis en train d'écrire un code ci-dessous s'il vous plaît avoir un coup d'oeil et pour plus d'étude aller chercher l'apple docs d'accord.
Code est ici:
//Pour Enregistrer
//Pour récupérer
veuillez vous référer à la question... "yourArrayToBeSaved" est le non-propriété des objets de la liste c'est pourquoi elle ne peut pas être enregistré à NSUserDefaults d'où le changement de NSArray à NSData et à l'arrière
Oui, je suis en utilisant cela, mais l'application crash.
OriginalL'auteur kshitij godara
Tout kshitij réponse est bonne, malheureusement, il ne s'arrête pas là. Si vous souhaitez sauvegarder des objets à l'intérieur de votre
NSUserDefaults
, votre objet personnalisé pour mettre en œuvre laNSCoding
protocole et de remplacer lesinitWithCoder
etencodeWithCoder
méthodes. Un exemple de ce type peut être:OriginalL'auteur avismara
essayez comme ceci
OriginalL'auteur Sport
Je pense que jsonValue est NSDictionary pas NSArray..
//(OU)
Je pense aussi qu'on ne peut pas stocker l'NSDictionary directement dans NSUserDefaults..Aller via @kshitij godara l'obtenir fait/enregistrer..
Vous pouvez utiliser NSKeyedArchiver pour écrire votre dictionnaire à un NSData.
Pour la récupération des données:
Espère que cela vous aide..!
OriginalL'auteur Vidhyanand
NSUserDefaults accepte des biens objets de la liste d' - NSDictionary, NSArray, NSString, NSNumber, NSDate et NSData. JSON documents contiennent NSDictionary, NSArray, NSString, NSNumber et NSNull. Vous voyez la différence - des biens objets de la liste ne peut pas contenir de NSNull valeurs.
Si votre objet JSON contient un NSNull objet (le document JSON que vous avez analysé contenait une valeur "null), alors vous ne pouvez pas stocker dans NSUserDefaults. En dehors de cela, tous les commentaires disant que vous ne pouvez pas stocker les données JSON dans NSUserDefaults sont des non-sens. C'est seulement NSNull les objets qui causent un problème.
Il y a une solution très simple à votre problème. Juste stocker l'origine des données json comme un NSData objet dans NSUserDefaults. Puis, quand vous lisez le NSUserDefaults, vous obtenez le NSData et les analyser. Au lieu de
vous venez d'écrire
OriginalL'auteur gnasher729
Vous avez besoin d'allouer les NSArray vous pouvez transmettre les valeurs de la série. Vous ne pouvez pas passer directement de la valeur.
NSArray *a = [[NSArray alloc]initWithObjects:[NSJSONSerialization JSONObjectWithData:options de données:erreur 0:nil], nil];
OriginalL'auteur Arjun Gupta
NSUserDefaults ne doit être utilisé jusqu'à 500k de données (https://forums.developer.apple.com/message/50696#50696)
Si le stockage de grandes quantités apps peut se bloquer, par expérience personnelle, j'ai vu des applications de stockage de 1 MO de données s'écraser au/peu de temps après [NSUserDefaults setObject:] et [NSUserDefaults synchroniser];
Pour vérifier la quantité de données un app live est à l'aide, ouvrez Xcode -> Window -> Périphériques, sélectionnez votre Appareil, sélectionnez votre application dans les Applications Installées et le téléchargement de l'Application Conteneur. Les valeurs par défaut sont stockées dans AppData->Préférences->votre.app.plist
Une alternative à l'enregistrement des données à l'utilisateur par défaut est d'écrire dans un fichier:
OriginalL'auteur A.Badger