Как отсортировать NSArray известных объектов таким образом, чтобы гарантируется, что ПЕРВАЯ запись будет равна известному объекту? - PullRequest
0 голосов
/ 28 марта 2011

Если у меня есть объект и настройка, такие как:

MyObject *objectOne = ....;

NSArray *arrayOfMyObjects = [self.someObject valueForKey=@"myObjects"] allObjects];

, где valueForKey = @ "objects" - это NSMutableSet типов MyObject,

Как именноиспользовать сортировку, чтобы ОБЕСПЕЧИТЬ (или, по крайней мере, попытаться убедиться), что objectOne равно
[arrayOfMyObjects objectAtIndex:0]?

В основном, гарантируя, что первый объект NSArray равенизвестный у меня объект?Это сделано для целей UITableView и обеспечения того, чтобы самая верхняя запись была objectOne при загрузке?

Я предполагаю, что требуется некоторая хитрость дескрипторов сортировки, но не совсем уверен, что синтаксис?

Спасибо!

1 Ответ

0 голосов
/ 28 марта 2011

Вы можете использовать блок компаратора, чтобы убедиться, что он первый:

MyObject *objectOne;
NSArray *array = [[self.someObject valueForKey:@"myObjects"] allObjects];
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id obj1, id obj2) {
    if(obj1 == objectOne) return (NSComparisonResult)NSOrderedAscending;
    if(obj2 == objectOne) return (NSComparisonResult)NSOrderedDescending;
    return (NSComparisonResult)NSOrderedSame;
}];

Typecast в возвращаемых значениях должен удалить предупреждение компилятора для неверных типов аргументов. NSOrdered... имеют тип enum _NSComparisonResult, и метод ожидает NSComparator, который определен как NSComparisonResult ^(id obj1, id obj2), но NSComparisonResult и enum _NSComparisonResult не совпадают.

...