我有一个如下图所示的 plist,这是我的主要 plist ,并且“bid”字段是唯一的。我有bid的值(例如bid = 90)然后我需要在我的主(第一张图像)plist的所有条目中搜索该值 并创建一个新的plist并检索相应的值(bid,description,category,rating)所属到那个plist。我该怎么做?
编辑
如果我有多个值,例如 bid =88 和另一个 bid=90,那么我必须从主 plist 创建一个新 plist(如第一张图片所示),那么结果应该如图3
我有一个如下图所示的 plist,这是我的主要 plist ,并且“bid”字段是唯一的。我有bid的值(例如bid = 90)然后我需要在我的主(第一张图像)plist的所有条目中搜索该值 并创建一个新的plist并检索相应的值(bid,description,category,rating)所属到那个plist。我该怎么做?
编辑
如果我有多个值,例如 bid =88 和另一个 bid=90,那么我必须从主 plist 创建一个新 plist(如第一张图片所示),那么结果应该如图3
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];
您可以使用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