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>

澄清:

  • 有一个键,就是组(Roast)。
  • 在那里,有三个阵列(每个食品一个)。
  • 在食品项目中,有一个可选的子计时器(在本例中仅适用于鸡肉和肉汁)。

我正在尝试做的事情:

我希望用户能够添加自己的密钥,然后在其中添加项目,或者在现有密钥中添加项目。示例:用户想要在键中添加“绿豆”:带有相应信息的烘焙:中火煮沸,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 回答