Y a-t-il une limite de taille pour sauver des dictionnaires?
Je tente d'écrire un dictionnaire assez grand avec environ 100 clés avec des dictionnaires imbriqués à l'aide de Writetofile: mais elle n'écrit jamais et est toujours fausse. P>
Est-ce une limitation ou suis-je en train de faire quelque chose d'incorrect, p>
Le code que j'utilise est le suivant. P>
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); NSString *documentsDir = [paths objectAtIndex:0]; NSString *fullPath = [documentsDir stringByAppendingPathComponent:@"test.plist"]; [myDict writeToFile: fullPath atomically:YES];
4 Réponses :
Il n'y a pas de limite de taille (enregistrer pour la mémoire et l'espace disque). P>
Quel est le contenu de Si c'est quelque chose que le petit ensemble de classes autorisées dans les listes de propriétés, vous ne pouvez pas utiliser soit vous auriez besoin de limiter votre dictionnaire pour ne contenir que des instances de ces classes ou em> vous devrez utiliser une méthode d'archivage différente. P>
En particulier, beaucoup de bibliothèques JSON vont detendre de pertinence: p>
mydict code>? p>
Writetofile: atomiquement: code>. p>
nsnull code> dans les collections. Ceux-ci ne peuvent pas être archivés. Vous devez les éditer ou les remplacer par des objets qui peuvent être archivés. P>
J'ai eu le même problème et le problème était [Nsnull Null] objet dans le dictionnaire :)
@yasirmtuk - ça l'a fait! Merci.
Il y a une autre astuce à cela, en plus d'utiliser uniquement des objets éligibles (instances de Nsnumber, Nstring, Nsdata, etc.) Les touches doivent être des objets Nstring. Normalement, vous pouvez utiliser n'importe quel objet pour la clé NSDictionary, mais pour avoir une circulation écrite réussie: les clés de la Nsdiction doivent être des instances Nstring. P>
J'avais du mal à sauver un nsdictionnel en utilisant Writetofile, cette réponse m'a aidé à résoudre le problème que j'avais. Des bizarreries comme celle-ci peuvent être une perte de temps si stupide pour résoudre le problème.
Je voulais confirmer que cela a en effet résolu mon problème! J'utilisais Nsnumber (s) comme clé mais que le dictionnaire n'écrira pas, après avoir converti les chiffres aux cordes, cela fonctionnait! Merci @otuken!
J'ajouterais une autre tour aussi que j'ai couru dans le lion. Le dossier que vous souhaitez écrire la plis doit exister avant d'appeler Nsdicdiction WritetOfile: atomique: code>. Vous pouvez utiliser NsfileManager pour tester l'existence et créer un nouveau dossier si nécessaire. P>
J'avais ceci, comme cela est mentionné par d'autres personnes, le dictionnaire ne peut pas être enregistré avec certains types de données (notables nulls).
Parce que mon dictionnaire provenait d'un serveur (sous forme de Json), je ne pouvais pas garantir ce qui était dans Cela a donc sauvé les données brutes (de DatawithContentsofurl) avant la sérialisation du JSON. À cette fin, je suppose que vous pourriez convertir la dict en nsdata et enregistrer cela - quelque chose comme; p> puis récupérer et convertir comme ça. P> < Pré> xxx pré> p>
Êtes-vous sûr de ne pas avoir d'objets non codables intégrés dans l'arbre du dictionnaire. Il existe un ensemble limité d'objets conformes à NSCODING. Avoir un chèque dans la console, j'ai l'impression que cela a largé le détail de l'objet incriminé dans ce cas si tel est le cas.