2013-04-28 4 views
0

Я хотел бы показать все данные в UITableView. Иногда переменные имеют значение NULL; иногда некоторые разделы имеют только 1 строку, в то время как другие могут иметь 2 или 3 строки в зависимости от того, какие переменные имеют данные.UITableView cellForRowAtIndexPath и numberOfRowsInSection - лучший способ заполнить

В настоящее время в CellForRowAtIndexPath все инструкции If и else if начинают выглядеть очень грязными. то есть для numberOfRowsInSection:

if (x!=NULL) return 1; else if (y!= NULL) return 2; else if ((x==NULL) && (y==NULL) return 3. 

Вы можете только представить себе, что cellForRowatIndexPath будет выглядеть. Теперь попробуйте сделать что-то похожее для 15 атрибутов! Это действительно противно и создает много места для ошибок.

Я знаю, что есть способ сделать это с помощью plist. Я никогда не делал этого с plist, где он создает раздел динамически на основе переменных NULL. Если plist позволяет это, пожалуйста, сообщите?

Любые другие подходы к передовой практике? Я весь во внимании! Благодарю.

ответ

1

Отъезд NSFetchedResultsController. Вот что он делает:

Вы используете контролер результатов, чтобы эффективно управлять результатами, возвращаемыми из запроса выборки Core Data, для предоставления данных для объекта UITableView.

Там отличный учебник здесь: http://www.raywenderlich.com/999/core-data-tutorial-how-to-use-nsfetchedresultscontroller

+0

Спасибо. Я знаю NSFetchedResultsController, но иногда, если определенные атрибуты являются нулевыми, некоторые разделы будут отсутствовать. Мы хотим показать все переменные, но не если они являются нулевыми, и не являются BOOLEANS. Как проверить переменные NULL с помощью NSFetchedResultsController? – user1107173

+0

Установите источник данных NSFetchedResultsController (NSFetchRequest и NSPredicate), чтобы возвращать только те данные, которые вы хотите отобразить. Не включайте нулевые/логические данные в свой поиск, если вы не хотите отображать его. Вам не нужно выполнять дополнительную фильтрацию в методах делегата tableview. Например, просто '[[<#Fetched results controller #> sections] count]' в вашем методе 'numberOfSectionsInTableView'. –

+0

Когда я получаю, я не знаю, какие из них NULL. Мне не обязательно отображать BOOLEAN, но нужно знать, если это 1 или 0. Это определит количество разделов и строк в UITableView – user1107173

0

Лучшая практика будет использовать NSFetchedResultsController как @Aaron предлагает. Если установить предикат правильно, вы не получите NULL значения:

[request setPredicate:[NSPredicate predicateWithFormat:@"(attributeThatMayBeNull != %@ AND booleanAttribute = %@)",[NSNull null],[NSNumber numberWithBool:NO]]; 

Поскольку вы не получите значения, которые вы не хотите, вы не должны проверить их в методе numberOfRows DATASOURCE , Просто используйте подсчет fetchedResults.

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