Сортировка по двум NSSortDescriptors не удалась — iOS

У меня есть массив, заполненный объектом Cored Data с именем Line. Каждая линия имеет связь один к одному с сущностью VerticePoint. Сущность VerticePoint содержит координаты x и y.

Я пытаюсь отсортировать этот массив по координатам x и y.

Если я сортирую только по x вершинам, вот так, это работает:

- (NSArray *)sortVerticesBottomLeftOrigin : (NSArray *)verticesPassed {

    NSArray *sortDescriptorsX = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"origin.x" ascending:YES]];

    NSArray *returnedVertices = [verticesPassed sortedArrayUsingDescriptors:sortDescriptorsX];

    return returnedVertices;

}

Однако, если я добавлю второй дескриптор сортировки для сортировки по y, сортировка завершится ошибкой журнала: -[__NSArrayI ascending]: unrecognized selector sent to instance 0xca7e0e0

Код :

- (NSArray *)sortVerticesBottomLeftOrigin : (NSArray *)verticesPassed {

    NSArray *sortDescriptorsX = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"origin.x" ascending:YES]];
    NSArray *sortDescriptorsY = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"origin.y" ascending:YES]];

    NSArray * finishedSort = [NSArray arrayWithObjects:sortDescriptorsX, sortDescriptorsY, nil];

    NSArray *returnedVertices = [verticesPassed sortedArrayUsingDescriptors:finishedSort];

    return returnedVertices;

}

Любые идеи, почему?


person GuybrushThreepwood    schedule 05.12.2013    source источник


Ответы (1)


Попробуй это:

- (NSArray *)sortVerticesBottomLeftOrigin : (NSArray *)verticesPassed {
    NSSortDescriptor *sortDescriptorX = [NSSortDescriptor sortDescriptorWithKey:@"origin.x" ascending:YES];
    NSSortDescriptor *sortDescriptorY = [NSSortDescriptor sortDescriptorWithKey:@"origin.y" ascending:YES];

    NSArray * finishedSort = [NSArray arrayWithObjects:sortDescriptorX, sortDescriptorY, nil];

    NSArray *returnedVertices = [verticesPassed sortedArrayUsingDescriptors:finishedSort];

    return returnedVertices;

}

Метод sortedArrayUsingDescriptors: ожидает массив дескрипторов сортировки. Вы можете передать туда массив с несколькими дескрипторами. Вам не нужно добавлять массив с одним дескриптором сортировки для каждого дескриптора сортировки.

person Ivan Genchev    schedule 05.12.2013