2012-01-21 110 views
0

我有一個plist文件的鍵和值,我希望用戶能夠保存一個關鍵字的值,以便他們可以在以後回調。我有回調部分都編程,但我需要能夠保存它。現在我有這個:如何將新密鑰添加到plist?

- (IBAction)addKey:(id)sender { 
    NSString *string1 = [input stringValue]; 
    NSString *string2 = [filesField stringValue]; 

    NSMutableDictionary *fileKeys = [[NSMutableDictionary alloc] initWithContentsOfFile: 
          [[NSBundle mainBundle] pathForResource:@"Keys" ofType:@"plist"]]; 
    [fileKeys setValue:string2 forKey:string1]; 
} 

我做錯了什麼,它不會將該鍵和它的值添加到plist。

回答

2

首先你不應該更新你的包中的plist文件;雖然它可以工作,但會破壞應用程序上的任何簽名,並且肯定會在沙箱下破解。

作爲一種替代方法,您可以將原始plist存儲在您的包中,並在您的應用第一次運行時將其複製到應用程序支持文件夾中。

其次,你需要寫您的修改字典迴文件系統,你可以用NSDictionarywriteToURL:atomicallywriteToFile:atomically方法做到這一點。

+2

您可能還會考慮存儲您將存儲在NSUserDefaults中的任何內容。 NSUserDefaults可以在第一次創建時使用默認的plist進行初始化,所以它非常適合設置等。如果你存儲的數據很大並且不適合NSUserDefaults,那麼上面的方法可能是你最好的選擇。 –

+0

此外,值得強調的是,您可能*能夠更改應用程序包中的文件,但是您可能不會*更有可能。永遠不要認爲應用程序包中的任何內容都是可寫的。 –

+0

感謝您的答案,我現在意識到如果我這樣做,每次我的應用程序更新它將刪除添加的項目,所以我甚至不會包括此功能 – drewsdunne

0

plist不是唯一的選擇。您也可以使用核心數據來實現它,具體取決於您想要存儲的內容。如果您使用CD,它會非常方便,您可以將GUI控件的外觀綁定到CD中的項目上。 基本上,您需要實體,一個用於用戶,一個用於物品。這可以讓你自己保留配置中的配置。不應該在沙箱下休息,但直到現在我還沒有沙盒的實際經驗。