【问题标题】:sortedArrayWithSelector and NSDictionnary on iOSiOS 上的 sortedArrayWithSelector 和 NSDictionnary
【发布时间】:2011-07-05 14:28:31
【问题描述】:

我有一个 NSDictionnary 数组,我想按一个 int 值对它们进行排序(键名为“age”)。 例如:

Dic1:年龄 = 30,性别 = 男性; Dic2:年龄=24,性别=男性;

数组:Dic1,Dic2;

现在有了一个我想要的比较方法:

数组:Dic2,Dic1;

我尝试了很多东西,但没有用。我使用 NSSortDescriptor 但它仅在 iOS 4.0 之后可用:(

你有解决办法吗? 谢谢!

编辑:

我在 NSDictionary 类别上写了一个比较方法:

- (NSComparisonResult)compareGood:(NSDictionary *)otherObject 
{
    return [[self objectForKey:@"age"] compare:[otherObject objectForKey:@"age"]];
}

但是我有这个崩溃错误:由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* -[NSCFNumber compare:]: nil argument'

【问题讨论】:

    标签: ios sorting compare nsdictionary


    【解决方案1】:

    NSSortDescriptor 的文档说:

    适用于 iOS 2.0 及更高版本。

    同样适用于 NSMutableArray 方法 -sortUsingDescriptors:。你应该可以这样做:

    NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:@"age" 
                                                              ascending:YES]
                                                              autorelease];
    [myArray sortUsingDescriptors:[NSArray arrayWithObject:descriptor];
    

    或者,如果 myArray 不可变,则对第二行执行此操作:

    NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];
    

    【讨论】:

    • sortDescriptorWithKey: ascending: 和 sortedArrayUsingDescriptor 仅从 iOS 4.0 开始可用。但是我现在正在使用 sortUsingDescriptors: 和 initWithKey: 升序:
    • 好点——我已经更新了示例以使用-initWithKey:ascending:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多