Мое приложение - это что-то вроде журнала. Я продолжаю свидетельство событий, которые происходят в один день. В принципе, у меня есть Entity (отображается в виде таблицы) с атрибутом «date». Когда я сохраняю новое событие, текущая дата сохраняется, используя [NSDate date]. Как мне организовать упорядочение таблицы, чтобы все события сортировались по дням и отображались как таковые? Любые подсказки будут оценены!Названия разделов таблицы TableView
ответ
Вы должны использовать параметр sectionNameKeyPath
вашего NSFetchedResultsController
, чтобы разделить ваши результаты по дате.
Несколько примеров here и here.
Вы по существу установить атрибут, который вы хотите использовать в качестве параметра sectionNameKeyPath, который будет выглядеть следующим образом:
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"date"
cacheName:nil];
Затем источник данных код делегат будет выглядеть примерно так:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[fetchedResultsController sections] count];
}
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return [fetchedResultsController sectionIndexTitles];
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}
Редактировать: Чтобы группировать элементы по дням, вам нужно будет создать свойство переходного процесса для ваших управляемых объектов - по существу строку даты, полученную с фактической даты.
Они идут в верхней части .h/.m как обычно
@property (nonatomic, strong) NSString *sectionTitle;
@synthesize sectionTitle;
Теперь, когда вы создали свойство, вы хотите, чтобы переопределить его аксессор на самом деле настроить название, когда оно запрашивается ,
-(NSString *)sectionTitle
{
[self willAccessValueForKey:@"date"];
NSString *temp = sectionTitle;
[self didAccessValueForKey:@"date"];
if(!temp)
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"d MMMM yyyy"]; // format your section titles however you want
temp = [formatter stringFromDate:date];
sectionTitle = temp;
}
return temp;
}
Обратите внимание, что этот код на самом деле проверяет, если sectionTitle уже в кэше и просто повторно использует его без воссоздания. Если вы ожидаете или позволяете изменить дату для прошлых объектов, необходимо также обновить sectionTitle, если это так, вам также необходимо перезаписать мутатор для самой даты и добавить строку для ее очистки sectionTitle (чтобы в следующий раз, когда заголовок был запрошен, он будет воссоздан).
- (void)setDate:(NSDate *)newDate {
// If the date changes, the cached section identifier becomes invalid.
[self willChangeValueForKey:@"date"];
[self setPrimitiveTimeStamp:newDate];
[self didChangeValueForKey:@"date"];
[self setSectionTitle:nil];
}
И, наконец, вы должны просто изменили sectionNameKeyPath
для вашего fetchedResultsController
к @"sectionTitle"
.
У Apple есть sample project, на который вы можете посмотреть, хотите ли вы увидеть что-то подобное в действии.
- 1. Названия разделов в представлениях таблицы
- 2. UITableView неправильные названия разделов
- 3. изменение названия разделов динамически
- 4. GCC: Названия разделов, содержащих символ/
- 5. iOS Перезагрузка двух разделов tableView
- 6. Нет разделов без строк в Tableview
- 7. Пользовательские заголовки разделов TableView с NSFetchedResultsController
- 8. Скрыть заголовки разделов Tableview на лету
- 9. Добавление разделов в tableView с использованием coreData
- 10. Сортировка разделов таблицы по NSDate
- 11. Вставка ячеек и разделов из таблицы Просмотров
- 12. HTML-таблицы разделов таблицы CSS
- 13. Вид таблицы черный, когда есть несколько разделов
- 14. Изменение разделов таблицы Hive, уменьшая количество разделов
- 15. Проблема удаления разделов и клетки от Tableview
- 16. Заполнение нескольких разделов Tableview с использованием pickerView
- 17. postgresql удалить таблицы разделов
- 18. Таблицы разделов в улье
- 19. разделов таблицы в MySQL
- 20. Изменение названия UIButton для выбранной ячейки таблицы
- 21. Заголовок таблицы разделов: многострочный/перенос слов
- 22. Сортировка массива по алфавиту для таблицы разделов таблицы
- 23. Как заставить перезагрузить TableView? Tableview кнопки аксессуаров и названия Tableview ячейки не изменяя цвет
- 24. Раскадровки и таблицы Таблица разделов
- 25. Формат таблицы с использованием разделов
- 26. Как заполнить Oracle таблицы разделов
- 27. Индексирование разделов таблицы в MySql
- 28. Как изменить отображение разделов таблицы?
- 29. Настройка названия динамического представления из вида таблицы
- 30. Обновление вида таблицы TableView
Спасибо. Теперь я застрял в той части, где есть раздел для каждого объекта, а не сгруппирован. – PonyLand
О, верно! Это связано с тем, что он использует весь объект даты, который содержит фактические часы/минуты/секунды, а не только день. Я добавляю код в конец моего ответа. – Dima
Решил это :) Большое спасибо lolcat! Надеюсь, это будет полезно для будущих noobs, таких как я. – PonyLand