Названия разделов с датой не работают

#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 и т.д., Пока не обнаружите ошибку.