2010-03-12 119 views
1

是否writeToFile:原子地將數據添加到現有的.plist?是否可以修改.plist中的值?應該重新編譯應用以實現更改嗎?objective-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來做到這一點。

*編輯 - 好的,我只是試圖寫文件希望希望它會覆蓋如果不添加到它。奇怪的是,下面的代碼在讀寫時選擇不同的路徑。

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

.plist文件在我的項目中。我可以從中讀取。當我寫入它時,它會創建.plist文件並將其保存在我的/users/.../library/中!這對任何人都有意義嗎?

回答

1

我會假設應用程序附帶的plist被假設爲read only - 它位於應用程序包中。

任何更新都存儲在用戶特定的目錄中,以便每個用戶都有自己的特定修改。

+1

絕對正確。你不應該寫入應用程序包中的任何文件。沒有管理員權限的用戶通常沒有權限執行此操作。如果您需要存儲持久數據,請將其存儲在'〜/ Library/Application Support'中或使用'NSUserDefaults'。 – 2010-03-12 04:12:17

+0

謝謝。說得通。 – Dave 2010-03-12 06:31:23

1

當然,您可以創建和編寫自己的.plist文件。通過NSArray *arrayPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *userFile=[[arrayPath objectAtIndex:0] stringByAppendingString:@"/whatever.plist"];,您可以編寫/編輯它。

但我也有同樣的問題:我如何編輯對特定鍵的值,而不是覆蓋整個.plist文件?

E.g.如果我想將<key>Title</key> <string>MyTitle</string>中的密鑰「Title」的值「MyTitle」更改爲「Sunflower」,那麼我怎麼能從代碼中做到這一點?