在Plist中对字典数组进行排序

时间:2012-12-27 05:57:01

标签: objective-c nsarray plist nsdictionary

尝试对字典数组进行排序。 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。

感谢您的帮助。

原始数据:

enter image description here

我目前正在导出,没有Lighting和Shade数组。数组现在是plist中唯一的东西。

enter image description here

1 个答案:

答案 0 :(得分: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];
    

这应该如你所描述的那样有效。