2012-01-02 15 views
0

我需要用6條記錄創建一個xml .plist,其中記錄5是來自用戶的輸入字符串,其餘的都是固定數據。我不確定這樣做的最佳方式是什麼?這看起來應該很簡單,但我沒有取得太大的成功。Cocoa/Objective-C將嵌套的字符串/數據寫入文件,如何?

需要被寫入的數據是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>AREA51</key> 
    <dict> 
     <key>ORIGIN</key> 
     <data>M45</data> 

      ...(4 more records)... 

       (USER STRING) 

      ...(1 more record)... 

    </dict> 
</dict> 
</plist> 

我已經試過以下一些例子,但我認爲他們已經過時,不符合規格。謝謝!

回答

5

我不知道這個教程怎麼可能過時,你做這個的方式在十年之後沒有改變。創建字典,並使用-writeToFile:atomically:方法。

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
    // object first... 
    [NSDictionary dictionaryWithObjectsAndKeys: 
     @"M45", @"ORIGIN", // object first, then key 
     ... // repeat 
     nil], 
    // then key... 
    @"AREA51", 
    nil]; 
[dict writeToFile:path atomically:NO]; 

(我不知道你是否真的需要原子寫作或沒有。如果你不確定是安全的,將其更改爲YES。)

+0

我試圖使用的代碼是:/ *新值輸入到文本字段'*/ - (無效)textFieldAction:(ID)發送方{ * NSUserDefaults的默認值= [NSUserDefaults的standardUserDefaults]; NSString * val; //從文本字段獲取新值 val = [myTextField stringValue]; if([val isEqualToString:defaultValue]){ [defaults removeObjectForKey:myKey]; } else { [defaults setObject:val forKey:myKey]; } }' 但只產生一個水平的plist。感謝名單 – 2012-01-03 01:42:50

1

條目在字典中*是無序的,所以你不應該期望用戶的入口處於任何特定的位置。相反,您可以使用鍵來檢索數據,所以你可能有:

<dict> 
    <key>ORIGIN</key> 
    <data>M45</data> 
    <key>USERENTRY</key> 
    <data>Hello world!</data> 
    ... 
</dict> 

,或者它可能是:

<dict> 
    <key>USERENTRY</key> 
    <data>Hello world!</data> 
    <key>ORIGIN</key> 
    <data>M45</data> 
    ... 
</dict> 

或一些其他命令。 Deitrich Epp編寫plist的指示應該是寫入數據所需的全部內容。只要認識到你可以使用任何對象的數據,包括用戶的字符串。