0

辞書の配列をソートしようとしています。plist ファイルには 2 つの配列があり、そのうちの 1 つを並べ替えようとしていて、多くの問題が発生しています。辞書を NSArray に抽出し、ファイルを並べ替えることができます。

辞書を抽出することによってのみこれを行うことができるので、情報を plist に保存しようとすると、構造と他の辞書の配列が失われます。配列を正しくソートするにはどうすればよいですか。配列を抽出して、それを独自のファイルとして保存していることを理解しています。私が間違っていることはわかりますが、正しい方法がわかりません。

NSArray *array =  [dict valueForKey:@"Lighting"];
NSSortDescriptor* nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Controller Zone" ascending:YES];
NSArray* sortedArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameSortDescriptor]];

NSString *pathToFileExportSorted = @"/Users/scott/Desktop/plistPreSEsorted.plist";
[sortedArray writeToFile:pathToFileExportSorted atomically: YES];

私はこのようなことを試しましたが、それを機能させることもできませんでした

    [array sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"Lighting.Controller Zone" ascending:YES]]];

Array Lighting を「Controller Zone」でソートし、plist をそのまま保持したいだけです。

助けてくれてありがとう。

元のデータ:

ここに画像の説明を入力

現在エクスポートしているものには、ライティングとシェードの配列がありません。現在、配列は plist 内の唯一のものです。

ここに画像の説明を入力

4

1 に答える 1

1
  • Lightingソートされた配列をキーに割り当てる必要があります
  • ...そして、変更されたLightingキーで最初の辞書を保存するには

    NSArray *array = [dict valueForKey:@"Lighting"];
    NSSortDescriptor *nameSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Controller Zone" ascending:YES];
    NSArray *sortedArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameSortDescriptor]];
    
    NSMutableDictionary *dictToSave = [[dict mutableCopy] autorelease];
    [dictToSave setObject:sortedArray forKey:@"Lighting"];
    
    NSString *pathToFileExportSorted = @"/Users/scott/Desktop/plistPreSEsorted.plist";
    [dictToSave writeToFile:pathToFileExportSorted atomically:YES];
    

あなたが説明したように、それはうまくいくはずです。

于 2012-12-27T16:04:28.537 に答える