0

试图对字典数组进行排序。plist 文件中有两个数组,我正在尝试对其中一个进行排序,但遇到了很多麻烦。我可以将字典提取到 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]]];

我只想按“控制器区域”对阵列照明进行排序,并保持 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 回答