我有一个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
部分。不确定这是否相关。
谢谢克雷格
答案 0 :(得分:0)
猜猜。
我没有指定caseInsensitiveCompare:
就取得了不错的成绩。
另外,严格来说NSFetchRequest
期望NSArray
为sortDescriptors
参数,而不是NSMutableArray
。在Apple的所有示例代码中,它通常类似于
[fetchRequest setSortDescriptors:
[NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];
我有这样的错误(使用mutable而不是immutable),但通常它也可以正常工作。也许改变这一点值得一试。