使用NSFetchedResult控制器处理节头

时间:2012-10-08 22:12:05

标签: iphone objective-c ios ipad core-data

我是核心数据的新手,目前我正在使用核心数据模型构建应用程序。我想要实现的是一个tableview分为每个月的节标题。目前我让应用程序工作,它显示每个单元格中的所有数据,但没有每个月的节标题。我想要的是带有“date”:“26/08/2012”的对象显示在标题为8月的部分下面。

我有一个带有以下数据的json webservice。

 "date": "26/08/2012",
    "hour": "18u00",
    "type": "JPL",
    "home": "KRC Genk",
    "away": "Zulte-Waregem",
    "homeScore": "2",
    "awayScore": "0"

我构建了它的NSManagedObject子类,以及该类的一个类,用于将值存储在数据库中。这一切都有效。 为了将这些值放在tableview中,我有以下方法。

- (void)getKalender // attaches an NSFetchRequest to this UITableViewController
{
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Kalender"];
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                        managedObjectContext:self.genkDatabase.managedObjectContext
                                                                          sectionNameKeyPath:nil
                                                                                   cacheName:nil];

}

这就是我在cellForRowAtIndexPath

中所做的
static NSString *simpleTableIdentifier = @"KalenderCell";

        KalenderCell *cell = (KalenderCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
        if ((cell == nil) || (![cell isKindOfClass:KalenderCell.class]))
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"KalenderCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }

        // ask NSFetchedResultsController for the NSMO at the row in question
        Kalender *kalender = [self.fetchedResultsController objectAtIndexPath:indexPath];
        // Then configure the cell using it ...

        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd/MM"];
       NSString *dateStr = [dateFormat stringFromDate:kalender.date];
        cell.lblType.text           = kalender.type;
        cell.lblHome.text           = kalender.home;
        cell.lblHomeScore.text      = kalender.homeScore;
        cell.lblAwayScore.text      = kalender.awayScore;
        cell.lblAway.text           = kalender.away;
        cell.lblDate.text           = dateStr;
        cell.lblHour.text           = kalender.hour;


        return cell;

但在这里我被困住了。任何人都可以帮助我如何使用NSFetchedResult控制器设置这些节头?

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

只需在NSFetchedResultsController初始化的 sectionNameKeyPath 中设置要使用的字段的名称,如下所示:

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.genkDatabase.managedObjectContext sectionNameKeyPath:@"date" cacheName:nil];

这应该将日期字符串设置为节名称。随意使用您想要的任何字段。