2012-05-19 2 views
0

Можно ли изменить порядок разделов табличного представления, в котором используются основные данные, без использования дескриптора сортировки?
Тип сортировки, в котором я нуждаюсь, не в алфавитном порядке, и он будет меняться во времени (я прочитал, что, используя Core Data, вы не можете использовать пользовательские селектора для дескриптора сортировки, поэтому по умолчанию они мне не помогают).Как изменить порядок секций при использовании данных ядра

У меня есть метод, который вызывается, когда должно произойти «переупорядочение раздела», и мне интересно, есть ли какой-то «индексный вектор», который я могу изменить, поэтому разделы упорядочиваются по этому индексу или что-то подобное.
Спасибо за помощь!

ответ

1

У вас есть два варианта здесь:


Все, что вы хотите сделать заказ в основных данных (и, соответственно, с использованием NSFetchedResultsController) вам нужно будет как-то модель в ваших данных и использование сортировки дескрипторов ,

Вы указываете (но не объясняете), что «дескриптор сортировки по умолчанию не помогает» вам. Я полагаю, это означает, что с данными, содержащимися в вашей модели, недостаточно для выполнения переупорядочения. В этом случае вам нужно будет ввести новый атрибут для рассматриваемого объекта. Это может звучать слишком много, но часто это не так уж плохо.


Вы можете изменить datasource ваших табличных от контроллера надуманных результатов в вашу собственную схему (например, с массивами). Конечно, есть последствия для памяти, но это может быть просто самым простым способом.

EDIT
После того, как вы пересчитаны проблема (круговой вектор сортировка) здесь предложение: вы можете использовать sortDescriptorWithKey:ascending:comparator: построить дескриптор сортировки, который обеспечивает именно тот результат, который вы хотите. (предупреждение: непроверенный код)

int centerNumber = 2; // or whatever your method returns 
NSSortDescriptor *descriptor = [NSSortDescriptor 
    sortDescriptorWithKey:@"number" 
       ascending:YES 
        comparator:^(int a, int b) { 
    NSComparisonResult r; 
    if (a == b) r = NSOrderedSame; 
    else if (a == centerNumber) r = NSOrderedAscending; 
    else if (b == centerNumber) r = NSOrderedDescending; 
    else if (abs(a-c) == abs(b-c)) 
     if (a<b) r = NSOrderedDescending; 
     else r = NSOrderedAscending; 
    else 
     if (abs(a-c) > abs(b-c)) r = NSOrderedAscending; 
     else r = NSOrderedDescending; 
    return r; 
}]; 

Позвольте мне знать, если он работает.

EDIT 2
Если вам нужен NSNumber (который, как ваши данные хранятся наиболее вероятно), может быть, это работает:

...^(id x, id y) { 
    int a = [x intValue]; 
    int b = [y intValue]; 
    ... 
}... 

Окончательная Обработать

Если компаратор не работы, вставка NSComparisonResult в виде результата:

...comparator:^NSComparisonResult(id x, id y){.... 
+0

Mmh, может быть, мне что-то не хватает в дескрипторах сортировки. У меня есть один атрибут в моей модели, который хранит число (от 1 до 5), и я хочу заказать их, начиная с того, который указан методом, который срабатывает, когда требуется переупорядочение. Например, если метод говорит «2», я хочу, чтобы разделы упорядочивались как «2, 3, 1, 4, 5». То есть, во-первых, тот, который говорит метод, а затем +1 и -1, +2 -2 и т. Д. В виде «круглого вектора». Можно ли это сделать, используя дескрипторы сортировки по умолчанию? – David

+0

Это можно сделать с помощью специализированного селектора сравнения. См. Мое редактирование. – Mundi

+0

Хорошо, я пытаюсь настроить обработчик заданных результатов для работы с запросом с этим дескриптором сортировки, но он не выполняет компаратор!Я тестировал компаратор вне этого, и он работает, и если я помещу NSLog внутри него, он будет вызван. Однако при настройке в качестве компаратора он не вызывается, разделы не переупорядочиваются, и в консоли нет NSLog. Я уверен, что я правильно настроил обработчик заданных результатов (работает «восходящий» параметр дескриптора сортировки). Где может быть проблема? : S – David

Смежные вопросы