2012-01-02 1 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

これについてのチュートリアルが時代遅れになる可能性があることはわかりませんが、あなたのやり方は10年のように変わっていません。辞書を作成し、-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 { [デフォルトのsetObject:val forKey:myKey]; } } ですが、1レベルのplistしか生成しません。高槻 –

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> 

または他のいくつかのため。デリッチEppのplistの作成手順は、データを書き込むために必要なものでなければなりません。ユーザーの文字列を含め、データに任意のオブジェクトを使用できることに気づくだけです。

関連する問題