1

以下の最初の画像のような plist があります。これがメインの plistであり、 「入札」フィールドが一意です。入札の値(たとえば、入札 = 90)がある場合、メイン (最初の画像) plist のすべてのエントリで値を検索し 、新しい plist を作成して、対応する値 (入札、説明、カテゴリ、評価) を取得する必要があります。そのplistに.どうすればこれを行うことができますか?

編集

入札 = 88 と別の入札 = 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 を作成する必要があることを覚えておいてください。それはあなたに任せます。



だからあなたは質問を編集しました: 検索する入札値の NSStrings を持つ NSArray bidsToSearch があると仮定しましょう:

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

class を使用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 に答える