Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSSortDescriptor-订单是否已更改?_Iphone_Objective C_Ios_Core Data_Nssortdescriptor - Fatal编程技术网

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系统中,每个子类都应该能够代表它的超类。