Я ожидал, что приведенный ниже код вернет объекты в 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). Функциональность этих вещей кажется мне совершенно непрозрачной, и поэтому отладка занимает вечность.