我期待下面的代码将imageSet中的对象作为排序后的数组返回。相反,在排序前后没有区别。为什么我的对象不能使用sortedArrayUsingDescriptors进行排序?
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是在我的核心数据模型中定义的。我不知道为什么在托管对象上排序的工作与“常规”对象的工作方式不同,但可能很重要。
为了证明@“图像标识”应该作为描述符中的重点工作,这里的上述输出的两个日志循环的集合中的一个,我迭代通过什么:
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故障排除)。这些东西的功能对我来说似乎完全不透明,因此调试需要永远。
我能为我做的工作代码最接近的适应。但是,这不能成为你的真实代码。 - [NSArray sortedArrayUsingDescriptors:]接受一个NSArray,这不是你传递的。 – Ken 2010-05-05 08:50:26
实际上,allObjects从NSSet中返回一个NSArray,所以代码如图所示......一旦插入了dreamlax的解决方案。 – clozach 2010-05-05 16:31:17