为什么我的对象不能使用sortedArrayUsingDescriptors进行排序?

时间:2010-05-05 08:06:12

标签: iphone objective-c sorting core-data

我希望下面的代码能够将imageSet中的对象作为排序数组返回。相反,之前和之后的排序没有区别。

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"imageID" ascending:YES];
NSSet *imageSet = collection.images;

for (CBImage *image in imageSet) {
    NSLog(@"imageID in Set: %@",image.imageID);
}

NSArray *imageArray = [[imageSet allObjects] sortedArrayUsingDescriptors:(descriptor, nil)];    
[descriptor release];

for (CBImage *image in imageArray) {
    NSLog(@"imageID in Array: %@",image.imageID);
}

Fwiw,CBImage在我的核心数据模型中定义。我不知道为什么对托管对象进行排序会比“常规”对象有所不同,但可能很重要。

作为证明@“imageID”应该作为描述符的键,以下是我正在迭代的其中一个集合输出的两个日志循环:

2010-05-05 00:49:52.876 Cover Browser[38678:207] imageID in Array: 360339
2010-05-05 00:49:52.876 Cover Browser[38678:207] imageID in Array: 360337
2010-05-05 00:49:52.877 Cover Browser[38678:207] imageID in Array: 360338
2010-05-05 00:49:52.878 Cover Browser[38678:207] imageID in Array: 360336
2010-05-05 00:49:52.879 Cover Browser[38678:207] imageID in Array: 360335

...为了获得额外的荣誉,我希望得到一个解决NSSortDescriptor问题的一般解决方案(特别是如果它也适用于NSPredicate故障排除)。这些东西的功能对我来说似乎完全不透明,因此调试需要永远。

1 个答案:

答案 0 :(得分:2)

我认为问题在于这一行:

... [[imageSet allObjects] sortedArrayUsingDescriptors:(descriptor, nil)];

在C(以及扩展名,Objective-C)中,逗号运算符通过评估每个子表达式的副作用,并使用最后一个子表达式的结果作为整个表达式的结果来工作。 。因此,

(descriptor, nil)

评估为nil。没有内置的方法来创建静态NSArray实例(例如,与使用@"str"创建静态NSString实例不同)。如果你想创建一个NSArray,你需要这样做:

... [[imageSet allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor, nil]];

或等同地

... [[imageSet allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];