2010-10-15 2 views
2

поэтому я хочу, чтобы разобрать XML и отображение (в UITableView) на «предметы» в возрастающем порядке в зависимости от «уроков»Как сортировать объекты разобраны из XML

XML:

<parfumeo_kkn> 
<tt_timetable> 
    <id>1015</id> 
    <day>1</day> 
    <class_id>98</class_id> 
    <lesson>9</lesson> 
    <teacher>bt</teacher> 
    <room>V1.2</room> 
    <subject>M</subject> 
    <pr_id>54</pr_id> 
</tt_timetable> 
<tt_timetable> 
    <id>1014</id> 
    <day>1</day> 
    <class_id>98</class_id> 
    <lesson>8</lesson> 
    <teacher>bt</teacher> 
    <room>V1.2</room> 
    <subject>bg</subject> 
    <pr_id>54</pr_id> 
</tt_timetable> 

ЭСТ.

(В этом маленьком примере будет «bg» перед «M».) Я все настроил свой парсер, но он не работает в том порядке, в котором я его хочу. thx для справки

+0

Когда обратный вызов вызывает каждый элемент запуска, вы проверяете конкретный тип элемента, для вашего случая будут уроки и соответствующие темы. Поместите эту пару в словарь, который вы можете добавить в какой-нибудь контейнер. И позже вы можете использовать его в соответствии с вашим желанием. – boom

+0

Спасибо за вашу помощь. НО: все, что я получаю, это: – dav3

+0

{ lesson = "9 \ n 8 \ n 11 \ n 11 \ n 10 \ n 10 \ n 5 \ n 4 \ n 3 \ n 2 \ n 1 \ n"; subject = "bg \ n bg \ n CAE \ n CAE \ n CAE \ n CAE \ n Gg \ n G \ n G \ n M \ n M \ n"; – dav3

ответ

2

Вы должны отделить логику анализатора и как отображать результаты в представлениях таблицы. Анализатор просто выполняет свою задачу разбора XML-контроллер для представления таблицы будет сделать немного больше задачи упорядочения результатов синтаксического анализа с помощью NSSortDescriptor, пример следующим образом:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lesson" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

Да, раньше я я предполагаю, что вы используете Core Data, в случае, если вы просто обычный массив, то вы можете просто позвонить:

NSArray *myArray = [xmlResultArray sortedArrayUsingDescriptors:sortDescriptors]; 

Теперь вы можете использовать MyArray для заполнения к контроллеру табличного.

Надеюсь, это поможет!

+0

спасибо! но как правильно настроить этот «fetchRequest»? – dav3

+0

Предполагается, что вы используете основные данные. – JeremyP

+0

спасибо alot .. но все равно не работает .. Я помещаю ваши строки в - (void) parserDidEnddocument: NSSortDescriptor * sortDescriptor = [[[NSSortDescriptor alloc] initWithKey: @ «урок» по возрастанию: ДА] автореле]; \t NSArray * sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor, nil]; \t [истории sortedArrayUsingDescriptors: sortDescriptors]; Возможно, я ошибся, но мой результат остается тем же. – dav3

0

Возможно, вы можете проанализировать XML-файл, поместить объекты в массив, а затем отсортировать этот массив?

NSArray *myArray = [parser parseTheFile:file]; 
[self sortTheArray:myArray]; 
+1

ответ выше, чем мой. – dwursteisen

+0

=), но я тоже хотел поблагодарить вас ... К сожалению, я слишком хочу использовать его правильно ..: -/ – dav3

+0

+1 для честной самооценки –

0

Чтобы отсортировать массив, вы просто сделаете это.

NSArray *sortedPairs = [originalArray sortedArrayUsingSelector:@selector(compare:)]; 

Если у вас есть словарь и хотите получить отсортированный массив с помощью клавиш вы бы

NSArray *arr = [dictionary keysSortedByValueUsingSelector:@selector(compare:)]; 

только у вас есть массив вы можете перечислить, как вы хотите.

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