2010-03-12 8 views
1

Est-ce que writeToFile: de manière atomique, ajoute des données à un .plist existant? Est-il possible de modifier une valeur dans un .plist? L'application devrait-elle être recompilée pour prendre en compte le changement?objectif-c Ajouter/Éditer le fichier .plist

J'ai une liste .plist personnalisée dans mon application. La structure est la suivante:

<array> 
<dict> 
    <key>Title</key> 
    <string>MyTitle</string> 
    <key>Measurement</key> 
    <dict> 
     <key>prop1</key> 
     <real>28.86392</real> 
     <key>prop2</key> 
     <real>75.12451</real> 
    </dict> 
    <key>Distance</key> 
    <dict> 
     <key>prop3</key> 
     <real>37.49229</real> 
     <key>prop4</key> 
     <real>58.64502</real> 
    </dict> 
</dict> 
</array> 

La balise de tableau contient plusieurs éléments de même structure. Je dois ajouter des éléments à la .plist existante. Est-ce possible? Je peux écrire un UIView pour le faire, si c'est le cas.

* EDIT - OK, j'ai juste essayé d'écrire en espérant qu'il écrirait au moins écraser si pas ajouter à lui. Curieusement, le code suivant sélectionne un chemin différent lors de la lecture et de l'écriture.

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

Le fichier .plist est dans mon projet. Je peux lire à partir de là. Quand j'écris dessus, il crée un fichier .plist et l'enregistre dans mon /users/.../library/! Est-ce que ceci signifie quelque chose pour quelqu'un?

Répondre

1

Je suppose que le plist fourni avec l'application est supposé read only - il se trouve dans l'ensemble de l'application.

Toutes les mises à jour sont stockées dans un répertoire spécifique à l'utilisateur, de sorte que chaque utilisateur ait ses propres modifications spécifiques.

+1

Absolument correct. Vous ne devriez jamais écrire dans les fichiers de l'ensemble de votre application. Les utilisateurs sans privilèges d'administrateur n'ont généralement pas l'autorisation de le faire. Si vous avez besoin de stocker des données persistantes, stockez-les dans '~/Library/Application Support' ou utilisez' NSUserDefaults'. –

+0

Merci. Logique. – Dave

1

Bien sûr, vous pouvez créer et écrire votre propre fichier .plist. Par NSArray *arrayPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *userFile=[[arrayPath objectAtIndex:0] stringByAppendingString:@"/whatever.plist"];, vous pouvez l'écrire/éditer.

Mais j'ai aussi la même question: comment éditer la valeur par rapport à une clé particulière, au lieu d'écraser tout le fichier .plist?

E.g. si je veux changer la valeur "MyTitle" pour la clé "Title" dans: <key>Title</key> <string>MyTitle</string> à "Sunflower", comment puis-je faire cela à partir du code?