2010-04-20 8 views
0

J'ai une plist qui est à sa racine un tableau avec des dictons à l'intérieur.Plist array, ne peut pas changer de dicton à l'intérieur

Je charge une plist de mes ressources en tant que NSMutableArray. Je le stocke dans nsuserdefault car il doit être persistant entre les démarrages.

[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"filters"]; 

mais je ne peux pas modifier les dictonaires dans le tableau car ils ne sont pas modifiables. comment puis-je les rendre mutables?

Répondre

1

Vous pouvez remplacer le dictionnaire par une copie modifiable de lui-même, en utilisant la méthode 'mutableCopy' de NSDictionary.

[EDIT] Exemple:

[ array replaceObjectAtIndex: 42 withObject: [ [ [ array objectAtIndex: 42 ] mutableCopy ] autorelease ] ];

+0

UHU, est-il directement à posible sur le tableau sans faire une copie de celui-ci? –

5

Vérifiez à l'aide « mutabilityOption: NSPropertyListMutableContainersAndLeaves », cela vous donne un contrôle très précis sur lequel les éléments sont ajoutés comme statique et quels éléments sont ajoutés mutable. Dans la liste des biens programers guide:

If you need finer-grained control over the mutability of the objects in a property list, use the propertyListFromData:mutabilityOption:format:errorDescription: class method, whose second parameter permits you to specify the mutability of objects at various levels of the aggregate property list. You could specify that all objects are immutable (NSPropertyListImmutable), that only the container (array and dictionary) objects are mutable (NSPropertyListMutableContainers), or that all objects are mutable (NSPropertyListMutableContainersAndLeaves).

For example, you could write code like this:

NSMutableArray *dma = (NSMutableArray *)[NSPropertyListSerialization 
         propertyListFromData:plistData 
         mutabilityOption:NSPropertyListMutableContainersAndLeaves 
         format:&format 
         errorDescription:&error]; 

This call produces a mutable array (dma) with mutable dictionaries in each element. Each key and each value in each dictionary are themselves also mutable.

+0

désolé, juste noté qu'il est sur le point d'être déprécié, l'appel plus récent est: '+ (id) propertyListWithData: (NSData *) options de données: (NSPropertyListReadOptions) opt format: (NSPropertyListFormat *) format erreur: (NSError **) erreur ' –