2012-01-13 2 views
2

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

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

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

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

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

ответ

0

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

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

0

Вот дополнительные шаги, которые я сделал, чтобы решить эту же тип вопроса:

Задаваемые метод:

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]; 
Смежные вопросы