使用NSSortDescriptor在iOS中对包装器对象进行排序

时间:2014-04-28 20:22:05

标签: ios objective-c arrays sorting nssortdescriptor

我正在尝试对UserWrapper对象进行排序。包装器对象包含对象User,User对象包含属性UserName(我想要排序)。

我们很容易对用户数组(source)进行排序,但添加的UserWrapper层让我感到困惑。求救!

这是我的代码,适用于简单的用户数组:

NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"UserName"
                                                               ascending:YES
                                                                selector:@selector(localizedCaseInsensitiveCompare:)] ; 

NSArray *descriptors = [NSArray arrayWithObject:nameDescriptor];
NSMutableArray *contactsStartingWithKey = [nameIndexesDictionary objectForKey:aKey];
[contactsStartingWithKey sortUsingDescriptors:descriptors]; // Exception thrown here because UserName is not a property of UserWrapper, but of UserWrapper.User

2 个答案:

答案 0 :(得分:1)

在您的情况下,排序描述符的参数也可以通过键路径

[[NSSortDescriptor alloc] initWithKey:@"User.UserName"
                            ascending:YES
                             selector:@selector(localizedCaseInsensitiveCompare:)] ; 

答案 1 :(得分:1)

尽管NSSortDescriptor的API和文档有点不一致,但"键"参数实际上是一个关键路径。因此,您只需指定@"User.UserName"作为密钥,您的代码就可以运行。