1

我有一个如下图所示的 plist,这是我的主要 plist ,并且“bid”字段是唯一的。我有bid的值(例如bid = 90)然后我需要在我的主(第一张图像)plist的所有条目中搜索该值 并创建一个新的plist并检索相应的值(bid,description,category,rating)所属到那个plist。我该怎么做?

编辑

如果我有多个值,例如 bid =88 和另一个 bid=90,那么我必须从主 plist 创建一个新 plist(如第一张图片所示),那么结果应该如图3

第一个图像主plist

最终输出我期待

image3-新结果

4

2 回答 2

1
NSString *path = [[NSBundle mainBundle] pathForResource:@"mainPlistFile" ofType:@"plist"];
//path has path for main plist.

NSDictionary *dictionary=[NSDictionary dictionaryWithContentOfFile: path];
NSArray *listbook = [dictionary objectForKey:@"listbook"];

for (NSDictionary *item in listbook) {
if ([[item objectForKey:@"bid"] isEqualToString yourNSStringWithBidToSearch]) {
//now item is the desired dictionary, you can get values by using objectForKey
//or write it to a file like below.
[item writeToFile:pathToSaveNewPlist automatically:NO];
break;
     }
}

请记住,您必须首先创建 NSString pathToSaveNewPlist 和 yourNSStringWithBidToSearch,我将把它留给您。



因此,您编辑了问题:假设您有一个 NSArray bidsToSearch,其中包含要搜索的出价值的 NSStrings:

NSMutableArray *targetListbook = [[NSMutableArrray alloc] init]];
NSDictionary *dictionary=[NSDictionary dictionaryWithContentOfFile:[[NSBundle mainBundle] pathForResource:@"mainPlistFile" ofType:@"plist"]];
for (NSDictionary *item in [dictionary objectForKey:@"listbook"])
    if ([bidsToSearch containsObject:[item objectForKey:@"bid"]])
        [targetListbook addObject:item];
[@{listbook:targetListbook} writeToFile:pathToSaveNewPlist automatically:NO];
于 2013-07-18T07:51:55.510 回答
0

您可以使用NSPropertyListSerialization类来序列化和反序列化属性列表。

编辑:下面是一些如何做到这一点的伪代码。

NSData* data = [NSData dataWithContentsOfFile:plistFile]; // read file
id plist = [NSPropertyListSerialization propertyListWithData:data ...]; // deserialize
// do your work
data = [NSPropertyListSerialization dataWithPropertyList:plist2 ...]; // serialize
[data writeToFile:plistFile2 ...]; // write to file
于 2013-07-18T07:47:53.147 回答