Я не уверен, почему вы решили использовать оператор switch в вашем коде, но он абсолютно бесполезен и вызывает по крайней мере некоторые из ваших проблем. В течение всех трех недель (три случая, описанные в вашем операторе switch) ваш метод titleForHeaderSection: будет возвращать ноль. Вместо этого вы должны попробовать что-то вроде этого:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSDate *now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comp = [gregorian components:NSYearCalendarUnit fromDate:now];
[comp setWeek:(section + 1)]; // section numbers start at 0, so need to add 1
[comp setWeekDay:1]; // Note that this is very different than setting day to 1
NSDate *resultDate = [gregorian dateFromComponents:comp];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM d, yyyy"];
NSString *myDateString = [formatter stringFromDate:resultDate];
[gregorian release]; // Clean up allocated objects by releasing them
[formatter release];
return [NSString stringWithFormat:@"Week of %@", myDateString];
}
Обратите внимание, что я установил день недели выше, а не день, поскольку я считаю, что вы пытаетесь получить дату первого дня этой недели.