CoreData: сортировка на основе предиката / массива с использованием IN - PullRequest
2 голосов
/ 14 января 2012

У меня есть хранилище CoreData, и я хочу поддерживать порядок сортировки, предоставляемый службой REST.Объекты в CoreData имеют атрибут guid, и REST-массив (с GUID) сортируется.Я хотел бы сохранить эту сортировку после извлечения объектов из CoreData.

Я использую следующее NSPredicate в своей выборке:

[NSPredicate predicateWithFormat:@"guid IN %@", wishlistGUIDs];

, где wishlistGUIDs равенпредоставленный REST массив идентификаторов GUID для соответствующих объектов.

Есть ли способ получить результаты при сохранении порядка wishlistGUIDs?Я исследовал, используя NSSortDescriptor и собирая массив дескрипторов безумной сортировки, перебирая wishlistGUIDs, но он кажется слишком сложным и просто "неправильным".

Ответы [ 2 ]

0 голосов
/ 20 марта 2012

Вот дополнительные шаги, которые я предпринял для решения этой же проблемы:

Определен метод:

NSInteger gidSort(Guild* num1, Guild* num2, void *context) {
    NSArray* wishlistGUIDs = (NSArray*)context;
    int v1 = [wishlistGUIDs indexOfObject:num1.guid];
    int v2 = [wishlistGUIDs indexOfObject:num2.guid];
    if (v1 < v2)
        return NSOrderedAscending;
    else if (v1 > v2)
        return NSOrderedDescending;
    else
        return NSOrderedSame;
}

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

NSArray* resorted = [results sortedArrayUsingFunction:gidSort context:wishlistGUIDs];
0 голосов
/ 17 марта 2012

Можете ли вы ограничиться iOS 5 / Lion?Это похоже на хороший вариант использования для упорядоченных отношений (который выглядит как NSOrderedSet).У вас будет «Список пожеланий» сущности Core Data, который будет содержать упорядоченные идентификаторы GUID.

За исключением этого, я думаю, вам придется сделать что-то некрасивое, например, сохранить свой собственный порядковый номер для списка идентификаторов GUID..

...