如何在plist文件中将对象设置为嵌套的Dictionary或Array

时间:2014-02-16 12:07:57

标签: ios objective-c arrays dictionary plist

我正在尝试将值设置为plist。 Plist包含数组或字典。 Dictionary或Array可以在Dictionarys和Arrays中保存多个Arrays或Dictionarys。 所以结构是这样的;

<key>Dictionary</key>
    <dict>
        <key>Dictionary-2</key>
        <dict>
            <key>Array</key>
            <array>
                <array>
                    <dict>
                        <key>Test</key>
                        <string></string>
                    </dict>
                </array>
            </array>
        </dict>
    </dict>

所以,例如。我想更改字符串Test,我该怎么做?当我创建MutableDictionarys和MutableArrays时,我可以将对象设置为index。但是我需要用新的字典和数组替换所有其他字典和数组。

有更简单的方法吗?然后替换字典或数组中的每个对象?

1 个答案:

答案 0 :(得分:2)

使用propertyListWithData:options:format:error:阅读属性列表时, 您可以设置NSPropertyListMutableContainers选项。

然后返回的属性列表包含可变数组和字典,以便您可以 只需替换内部对象,例如

plist[@"key1"][@"key2"][0][@"Test"] = @"new value;

使用NSPropertyListMutableContainersAndLeaves选项,您甚至可以 修改值,例如:

[plist[@"key1"][@"key2"][0][@"Test"] appendString:@"..."];

如果你不知道中间节点是否存在那么你会 必要时必须创建它们,例如:

if (plist[@"key1"] == nil)
    plist[@"key1"] = [NSMutableDictionary dictionary];
if (plist[@"key1"][@"key2"] == nil)
    plist[@"key1"][@"key2"] = [NSMutableArray array];
if ([plist[@"key1"][@"key2"] count] == 0)
    plist[@"key1"][@"key2"][0] = [NSMutableDictionary dictionary];

plist[@"key1"][@"key2"][0][@"Test"] = @"new value";