2010-03-12 1 views
1

Does writeToFile: атомизировать, добавить данные в существующий .plist? Можно ли изменить значение в .plist? Должно ли приложение быть перекомпилировано для вступления в силу изменения?object-c Добавить в/Редактировать .plist файл

У меня есть пользовательский список .plist в моем приложении. Структура приведена ниже:

<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> 

Тег массива содержит несколько элементов с одинаковой структурой. Мне нужно добавить элементы в существующий .plist. Это возможно? Я могу написать UIView, чтобы сделать это, если да.

* EDIT - ОК, я просто попытался записать файл, надеясь, что он по крайней мере перезапишет, если не добавит его. Как ни странно, следующий код выбирает другой путь при чтении и записи.

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

Файл .plist находится в моем проекте. Я могу это прочитать. Когда я пишу ему, он создает файл .plist и сохраняет его в моем /users/.../library/! Это имеет смысл для всех?

ответ

1

Я бы предположил, что plist, который поставляется с приложением, принимается read only - он находится внутри приложения.

Любые обновления хранятся в каталоге конкретного пользователя, так что каждый пользователь будет иметь свои собственные изменения.

+1

Абсолютно правильно. Вы никогда не должны писать в файлы в своем приложении. У пользователей без прав администратора обычно нет разрешения на это. Если вам нужно сохранить постоянные данные, сохраните их в '~/Library/Application Support' или используйте' NSUserDefaults'. –

+0

Спасибо. Имеет смысл. – Dave

1

Конечно, вы можете создавать и писать свой собственный .plist-файл. К NSArray *arrayPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *userFile=[[arrayPath objectAtIndex:0] stringByAppendingString:@"/whatever.plist"]; вы можете написать/отредактировать его.

Но у меня также есть тот же вопрос: как изменить значение по отношению к определенному ключу, а не переписывать весь файл .plist?

E.g. если я хочу изменить значение «MyTitle» для ключа «Title» в: <key>Title</key> <string>MyTitle</string> на «Sunflower», как я могу это сделать из кода?