0

我正在使用一个结构为带有字典的数组的 plist 来填充我的应用程序。plist 存储在包中。我对某些词典中的某些字符串进行了一些更改(例如拼写更正)。

appDidFinishLaunchingWithOptionscopyPlist如果 plist 不存在,则调用将其复制到文档目录。因此,如果 plist 确实存在,我需要检查每个字典中的一些字符串是否有更改,并替换这些字符串。

我做了两个NSMutableArrays

if ([fileManager fileExistsAtPath: documentsDirectoryPath]) {
NSMutableArray *newObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:documentsDirectoryPath];
NSMutableArray *oldObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:bundlePath];

//Then arrange the dictionaries that match so some their strings can be compared to each other.
}

如何安排匹配NSDictionaries以便可以比较他们的一些字符串?该Name字符串未更改,因此可用于识别匹配项。

代码示例或参考有用的教程或示例代码会很棒,因为我自己的研究并没有带来任何有用的东西,我真的需要纠正这个问题。

4

1 回答 1

1

plist 可以像这样直接读入字典:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];

如果对两个 plist 执行此操作,则可以使用来自另一个 plist 的匹配键更新其中一个,如下所示:

- (void)updateDictionary:(NSMutableDictionary *)dictA withMatchingKeysFrom:(NSDictionary *)dictB {

    // go through all the keys in dictA, looking for cases where dictB contains the same key
    // if it does, dictB will have a non-nil value.  use that value to modify dictA

    for (NSString *keyA in [dictA allKeys]) {
        id valueB = [dictB valueForKey:keyA];
        if (valueB) {
            [dictA setValue:valueB forKey:keyA];
        }
    }
}

在开始之前,您需要使更新的字典可变,如下所示:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSMutableDictionary *dictA = [dict mutableCopy];
于 2012-09-08T23:09:44.347 回答