Für jeden Monat einen anderen Abschnitt mit abgerufenem Ergebniscontroller festlegen
Ich versuche, meine Tabellenansicht für jeden Monat in Abschnitte aufzuteilen. Ich beginne mit demDateSectionTitles Beispiel für Apfel. Zuallererst habe ich in meiner Kerndatenbank ein Attribut 'sectionIdentifier' hinzugefügt. Dann habe ich in meiner ManagedObject-Unterklasse diese Methode hinzugefügt.
- (NSString *)sectionIdentifier {
// Create and cache the section identifier on demand.
[self willAccessValueForKey:@"sectionIdentifier"];
NSString *tmp = [self primitiveSectionIdentifier];
[self didAccessValueForKey:@"sectionIdentifier"];
if (!tmp) {
/*
Sections are organized by month and year. Create the section identifier as a string representing the number (year * 1000) + month; this way they will be correctly ordered chronologically regardless of the actual name of the month.
*/
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:[self date]];
tmp = [NSString stringWithFormat:@"%d", ([components year] * 1000) + [components month]];
[self setPrimitiveSectionIdentifier:tmp];
}
NSLog(@"tmp: %@",tmp);
return tmp;
}
Dies ist, was ich in meinem titleForHeaderSection tue
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> theSection = [[self.fetchedResultsController sections] objectAtIndex:section];
/*
Section information derives from an event's sectionIdentifier, which is a string representing the number (year * 1000) + month.
To display the section title, convert the year and month components to a string representation.
*/
static NSArray *monthSymbols = nil;
if (!monthSymbols) {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setCalendar:[NSCalendar currentCalendar]];
monthSymbols = [formatter monthSymbols];
}
NSInteger numericSection = [[theSection name] integerValue];
NSInteger year = numericSection / 1000;
NSInteger month = numericSection - (year * 1000);
NSString *titleString = [NSString stringWithFormat:@"%@ %d", [monthSymbols objectAtIndex:month-1], year];
NSLog(@"titelstring is: %@",titleString);
return titleString;
}
Für meine Anzahl von rowsInSection mache ich das.
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
NSInteger count = [sectionInfo numberOfObjects];
return count;
Und das für meine NumberOfSectionsInTableview
NSInteger count = [[self.fetchedResultsController sections] count];
return count;
Kann jemand helfen?
Danke im Voraus!
Was läuft falsch?
Zuallererst druckt es nicht mein Log in NSLog (@ "tmp:% @", tmp); Und außerdem erhalte ich folgende Fehlermeldung:
CoreData: error: (NSFetchedResultsController) A section returned nil value for section name key path 'sectionIdentifier'. Objects will be placed in unnamed section
2012-10-10 10:41:17.475 RacingGenk[15785:c07] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (-1 (or possibly larger)) beyond bounds (12)'