在从plist加载的现有NSMutableDictionary结构中存储值?

时间:2013-03-06 01:03:54

标签: objective-c plist nsdictionary

首先,谢谢大家的帮助到目前为止,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>

澄清:

  • 有一个键,即组(Roast)。
  • 在那里,有三个阵列(每个食物项目一个)。
  • 在食品中,有一个可选的subtimer(在这种情况下仅适用于鸡肉和肉汁)。

我正在尝试做什么:

我希望用户能够添加自己的密钥,然后在其中添加项目,或者在现有密钥中添加项目。示例:用户想要将“青豆”添加到密钥中:与相应的信息一起烤:中火煮沸,00:10,greens.jpg。

我目前所做的事情:

将plist加载到字典中,尝试将用户条目保存到现有密钥中,但它似乎只是创建一个新密钥,尽管使用相同的密钥值。

我被困的地方:

我想找个方法说:如果存在一个名为'Roast'的密钥,那么进入该密钥,并在以下结构中添加以下值。是否有捷径可寻?或者也许有一种方法可以获取现有密钥的“位置”,然后使用该位置添加到可变字典中,然后将其存储到plist中?也许我的结构也不正确?如果有人可以告诉我如何将结构值添加到2级,那么我将非常感激,那么我应该能够弄明白。

事先,非常感谢你们迄今为止的所有帮助!

此致 SineTwo

1 个答案:

答案 0 :(得分: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>

这样你的root就是一个类别数组。每个类别都有自己的名称和项目。类别项目将具有名称,类型,时间等。

因此,当您想要创建新类别时,请创建一个包含类别名称和类别项目数组的字典。类别项目将有自己的项目名称,类型,时间等。非常干净和优雅。可以将任意数量的项目添加到类别项目。