#ios #uitableview #core-data #nsfetchedresultscontroller
#iOS #uitableview #core-data #nsfetchedresultscontroller
Вопрос:
У меня проблема в tableview с разделом по дате. Я взял пример Apple: заголовки разделов даты
Меня не волнует год. Мне просто нужны месяц и день. Поэтому я адаптирую свой код таким образом :
В моем классе CoreData :
- (NSString *)sectionIdentifier {
[self willAccessValueForKey:@"sectionIdentifier"];
NSString *tmp = [self primitiveSectionIdentifier];
[self didAccessValueForKey:@"sectionIdentifier"];
NSLog(@"!Temp");
if (!tmp) {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[self timeStamp]];
tmp = [NSString stringWithFormat:@"%d", ([components month]*100) [components day]];
[self setPrimitiveSectionIdentifier:tmp];
}
return tmp;}
И в моем методе titleForHeaderInSection в моем главном контроллере :
NSInteger month = numericSection / 100;
NSInteger day = numericSection - (month * 100);
NSString *titleString = [NSString stringWithFormat:@"%d %d",day, month];
return titleString;
Но когда я запускаю свое приложение, у меня появляется это сообщение :
CoreData: ошибка: (NSFetchedResultsController) Раздел вернул нулевое значение для ключевого пути имени раздела ‘sectionIdentifier’. Объекты будут помещены в неназванный раздел
Вы знаете почему? Спасибо за вашу помощь!
Ответ №1:
Одна из распространенных ошибок, обычно кодирующих свойство transient для nsmanagedobject, заключается в том, что люди забывают также «включить» свойство transient в файле модели данных (xcdatamodeld).
Комментарии:
1. Включение временных свойств спасло мой день. Спасибо!
Ответ №2:
Логично, что это произошло бы, если бы в этой строке вашего кода
NSDateComponents *components = [calendar components:
(NSMonthCalendarUnit | NSDayCalendarUnit)
fromDate:[self timeStamp]];
[self timeStamp]
возвращает недопустимое NSDate
. Проверьте с помощью NSLog
инструкций, если это так.
Комментарии:
1. Ничего не напечатано. Это не входит в — (NSString *)Метод sectionIdentifier :/
2. Что ж, отлично. Вы обнаружили проблему.
3. Это неразрешимо из опубликованного вами кода. Вернитесь к тому месту, где вы создавали данные, проверьте постоянное хранилище sqlite и т.д., Пока не обнаружите ошибку.