0

まず、これまでのご協力に感謝します。stackoverflowは素晴らしいコミュニティです!!

このplistはアプリケーションのロード時に存在し、現在は次のようになっています。

<plist version="1.0">
<dict>
    <key>Roast</key>
    <array>
        <array>
            <string>Chicken</string>
            <string>200c, Grill</string>
            <string>01:00</string>
            <string>chicken.jpg</string>
            <array>
                <string>00:30</string>
                <string>Baste</string>
            </array>
        </array>
        <array>
            <string>Veg</string>
            <string>200c, Grill</string>
            <string>00:20</string>
            <string>veg.jpg</string>
        </array>
        <array>
            <string>Gravy</string>
            <string>High heat pan</string>
            <string>00:10</string>
            <string>gravy.jpg</string>
            <array>
                <string>00:05</string>
                <string>Stir</string>
            </array>
        </array>
    </array>
</dict>
</plist>

明確にするために:

  • グループ(ロースト)という1つのキーがあります。
  • その中には、3つの配列があります(各食品に1つ)。
  • 食品内には、オプションのサブタイマーがあります(この場合はチキンとグレイビーにのみ適用されます)。

私がやろうとしていること:

ユーザーが自分のキーを追加してからアイテムを追加できるようにするか、既存のキー内にアイテムを追加できるようにしたいと思います。例:ユーザーが「GreenBeans」をキーに追加したい:対応する情報で焙煎:中火で沸騰、00:10、greens.jpg。

私が現在行ったこと:

plistを辞書にロードし、ユーザーエントリを既存のキーに保存しようとしましたが、同じキー値を使用しているにもかかわらず、新しいキーを作成しているようです。

私が立ち往生しているところ:

言い方を教えてください。「Roast」というキーが存在する場合は、そのキーに移動し、次の構造に次の値を追加します。これを行う簡単な方法はありますか?または、既存のキーの「場所」を取得し、その場所を使用して可変ディクショナリに追加し、それをplistに保存する方法がありますか?おそらく私もそれを間違って構成しましたか?2レベル下の構造に値を追加する方法を教えてくれる人がいれば、とてもありがたいです。そうすれば、それを理解できるはずです。

事前に、これまでのすべてのあなたの助けに感謝します!

よろしく、SineTwo

4

1 に答える 1

1

あなたはplistを持っているので、plistのNSMutableDictionaryからできます

NSString *plistPath = [[NSBundle mainBundle]pathForResource:@"plistName" forType:@"plist"];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];


NSMutableArray *roastItems = [dict[@"Roast"] mutableCopy];

にアイテムを追加できますroastItems

//Modifed roast items is added back to the root dictionary
[dict setObject:roastItems forKey:@"Roast"];

新しいカテゴリを追加する場合は、新しいキーと対応する値をに追加しますdict

NSString *newCategoryName = @"NewCategory";
NSArray *categoryItems = //User populated array;

[dict setObject:categoryItems forKey:newCategoryName];

//Save the modified dict to plist
[dict writeToFile:plistPath atomically:YES];

編集 :

plistの構造をこれにすることができ、モデルの整理が非常に簡単になります

<plist version="1.0">
<array>
    <dict>
        <key>CategoryName</key>
        <string>Roast</string>
        <key>CategoryItems</key>
        <array>
            <dict>
                <key>ItemName</key>
                <string>Chicken</string>
                <key>Type</key>
                <string>Grill</string>
                <key>Time</key>
                <string>01:00</string>
                <key>ImageName</key>
                <string>image.jpg</string>
            </dict>
        </array>
    </dict>
</array>
</plist>

これを使用すると、ルートはカテゴリの配列になります。各カテゴリには、名前とアイテムがあります。カテゴリアイテムには、名前、タイプ、時間などがあります。

したがって、新しいカテゴリを作成する場合は、カテゴリ名とカテゴリアイテムの配列を使用して辞書を作成します。カテゴリアイテムには、独自のアイテム名、タイプ、時間などがあります。非常にクリーンでエレガントです。カテゴリアイテムには、任意の数のアイテムを追加できます。

于 2013-03-06T01:24:16.687 に答える