NSSortDescriptor - 订单已更改?

时间:2012-01-27 22:23:44

标签: iphone objective-c ios core-data nssortdescriptor

我有一个NSFetchRequest从核心数据中获取对象,并使用一个简单的NSSortDescriptor对它们进行排序。我根据用户选择的内容使用了几个不同的,但它们是这样的:

    NSMutableArray *sortDescriptors = [NSMutableArray array];
    NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"ownerName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
    NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"petName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
    [sortDescriptors addObject:sortDescriptor1];
    [sortDescriptors addObject:sortDescriptor2];
    [fetchRequest setSortDescriptors:sortDescriptors];

在iOS5和5.1上,一切都按预期工作,但是当我在运行iOS4.2.1(或4.3模拟器)的iPad上测试完全相同的代码时,所有第一个排序描述符的顺序都是相反的。在此示例中,所有者名称按Z到A排序,但宠物正确排序为A到Z!

早期iOS版本中是否存在导致ascending布尔值错误的错误方法?或者,还有其他我可能做错了吗?

编辑:第一个键(ownerName)用作NSFetchedResultsController部分。不确定这是否相关。

谢谢克雷格

1 个答案:

答案 0 :(得分:0)

猜猜。

我没有指定caseInsensitiveCompare:就取得了不错的成绩。

另外,严格来说NSFetchRequest期望NSArraysortDescriptors参数,而不是NSMutableArray。在Apple的所有示例代码中,它通常类似于

[fetchRequest setSortDescriptors:
   [NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];

我有这样的错误(使用mutable而不是immutable),但通常它也可以正常工作。也许改变这一点值得一试。