从plist读书,但只接受某些字符串

时间:2012-04-03 08:01:12

标签: objective-c ios xcode plist

目标是拥有一个所有字符串长度为n的数组。

所以,目前我的代码所做的是将一个plist(只有250,000个字符串)读入一个数组,然后迭代数组,以便找出哪些是长度为n。当然,为了提高效率,我更喜欢能够从STRING BY STRING读取数据,因此,正如我正在阅读的那样,我可能在插入数组之前的长度。我刚刚开始学习objective-c,但我一直在努力寻求解决方案= P

编辑:我刚刚发现我可以找到更多文档输入属性列表而不是plist进入谷歌:)所以我可能能够自己解决这个问题

2 个答案:

答案 0 :(得分:3)

您可以将plist解析为树(NSMutableDictionary)。 Dict将包含字符串长度的键。

例如

NSMutableDictionary *result = [NSMutableDictionary dictionary];

for (NSString *str in [plistDict allObjects]) {

    NSString *key = [NSString stringWithFormat:@"%d", [str length]];

    NSMutableArray *array = [result objectForKey:key];
    if (!array) {
        array = [NSMutableArray array];
    }
    [array addObject:str];
    [result setObject:array forKey:key];
}

比你可以访问所需字符串长度的数组

NSArray *string4Lenght = [result objectForKey:@"4"];

答案 1 :(得分:1)

Apple不提供用于逐步解析plist的API。

如果以XML格式存储plist,可以使用NSXMLParser来解析它。模式非常简单,在Property List Programming Guide中有所描述。

如果要逐步解析二进制格式,则需要做更多工作。该格式没有官方文档。 Apple用于读取和编写格式的源代码是开源的(CFBinaryPList.c),并且有一些有用的注释和实际代码。

如果您确实需要逐步进行,我建议使用XML路由。如果这样做,您可能希望子类NSInputStream能够从gzip或bzip2文件中读取并动态解压缩。