如何通过对象图对受管对象的NSMutableArray进行排序

gui*_*aut 12 sorting core-data nsmutablearray iphone-sdk-3.0

我是Apple的iPhone 3.0 SDK支持Core数据的新手,我对iPhone开发相对较新.我的问题是比文档中涵盖的稍微"复杂"的排序.我怀疑我做出了一个不正确的基本假设.

如何通过包含集合中更深层次的属性对预先获取的托管对象集合进行排序?

示例:Farm有1到多个牛仔(Farm.cowboys)牛仔有1到1个人(Cowboy.person)人有lastName(Person.lastName)

已获取整个对象图,并通过UITableView显示牛仔.现在,我如何按姓氏排序牛仔队?我需要重新获取它们吗?如果是,我如何使用嵌套排序?

目前我正在尝试对牛仔的NSMutableArray([Farm.cowboys allobjects])进行排序,这对牛仔的那些属性来说很好.但是我不确定如何通过Cowboy.person.lastName对Cowboys的集合进行排序时如何工作呢?

Mat*_*all 21

如果您可以定位10.6,则可以使用块来完成此操作.像这样:

- (NSArray *)sortedArray {
    return [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){
    NSString *lastName1 = [[obj1 person] lastName];
    NSString *lastName2 = [[obj2 person] lastName];
    return [lastName1 caseInsensitiveCompare:lastName2]; }];
}
Run Code Online (Sandbox Code Playgroud)

  • 另外值得注意的是,如果你使用的是`NSMutableArray`,你可以使用`sortUsingComparator:`代替,如果你愿意的话. (2认同)

Chr*_*ris 5

您可以这样排序:

[myUnsortedArrayOfCowboys sortedArrayUsingDescriptors:
    [NSArray arrayWithObject:
        [NSSortDescriptor
            sortDescriptorWithKey:"person.lastName"
            ascending:YES]]];
Run Code Online (Sandbox Code Playgroud)

请注意'.' 在排序描述符键中.这是您遍历对象图的方式.


gui*_*aut 0

希望有人有更好的解决方案。然而....

具有比较选择器和对排序对象的引用的包装对象可以工作。它不像我想要的那么干净,所以希望其他人能想出一个替代方案。

本质上,CowboyWrapper 具有牛仔属性。CowboyWrapper 还有一个比较选择器。通过构建并保持同步 CowboyWrappers 的 NSMutableArray,排序就可以了。