Iphone NSSortDescriptor-订单是否已更改?
我有一个Iphone NSSortDescriptor-订单是否已更改?,iphone,objective-c,ios,core-data,nssortdescriptor,Iphone,Objective C,Ios,Core Data,Nssortdescriptor,我有一个NSFetchRequest,它从核心数据中获取对象,并使用一个简单的NSSortDescriptor对它们进行排序。根据用户的选择,我使用了几种不同的方法,但它们是这样的: NSMutableArray *sortDescriptors = [NSMutableArray array]; NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"ownerName" asc
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版本中是否存在导致升序
布尔值错误的bug?或者,是否有其他我可能做得不正确的事情
编辑:第一个键(ownerName)用作NSFetchedResultsController
部分。不确定这是否相关
谢谢克雷格,我只是猜一下
我在没有指定案例敏感性比较:
的情况下获得了很好的结果
另外,严格地说,NSFetchRequest
要求NSArray
作为sortDescriptors
参数,而不是NSMutableArray
。在苹果的所有示例代码中,它通常类似于
[fetchRequest setSortDescriptors:
[NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];
我也有过类似的错误(使用mutable而不是immutable),但通常它也能正常工作。也许改变这一点值得一试。只是猜测而已
我在没有指定案例敏感性比较:
的情况下获得了很好的结果
另外,严格地说,NSFetchRequest
要求NSArray
作为sortDescriptors
参数,而不是NSMutableArray
。在苹果的所有示例代码中,它通常类似于
[fetchRequest setSortDescriptors:
[NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];
我也有过类似的错误(使用mutable而不是immutable),但通常它也能正常工作。也许值得一试更改。如果您传递了
升序
参数的否
,您的顺序是否正确?是的。我已将第一个SD上的“升序”字符更改为“否”,然后是iOS5结果的镜像。第二个SD仍然设置为“是”,并且区段内的项目以相同的方式订购。奇怪的如果为升序
参数传递否
,是否获得正确的顺序?是。我已将第一个SD上的“升序”字符更改为“否”,然后是iOS5结果的镜像。第二个SD仍然设置为“是”,并且区段内的项目以相同的方式订购。奇怪的谢谢我尝试删除不区分大小写比较
,但没有什么不同。明天我将尝试将可变数组更改为数组,看看它是否有任何区别。我可以确认这没有任何区别:(关于NSMutableArray
与NSArray
的比较,由于NSMutableArray
是NSArray
的一个子类,那么当您传入它时,它会自动被强制转换,所以这不会给您带来任何问题。在一个健全的OO系统中,每个子类都应该能够代表它的超类。谢谢!我尝试删除了cas。)eInsensitiveCompare
但没有区别。明天我将尝试将可变数组更改为数组,看看它是否有任何区别。我可以确认这没有区别:(关于NSMutableArray
与NSArray
的比较,由于NSMutableArray
是NSArray
的一个子类,因此当您传入它时,它将自动强制转换,因此这不会给您带来任何问题。在一个健全的OO系统中,每个子类都应该能够代表它的超类。