将NSFetchedResultsController与UITableView“插入控件”结合使用

时间:2013-09-11 07:33:44

标签: ios uitableview nsfetchedresultscontroller insertion

我正在尝试使用NSFetchedResultsController让UITableView与Core Data一起使用,同时在编辑期间还有一个插入控件(UITableViewCellStyleInsert)作为最后一行。

由于插入控件只是另一个tableviewcell,只是使用不同的编辑样式,我更改了相应的UITableViewDatasource委托方法,如:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView
          editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([self isInsertionControl:indexPath]) {
        return UITableViewCellEditingStyleInsert;
    } else {
        return UITableViewCellEditingStyleDelete;
    }
}

报告的行数也应该在编辑时相应更新(假设现在只有一个部分):

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    id<NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResultsController.sections[section];

    NSUInteger numberOfObjects = sectionInfo.numberOfObjects;

    // FIXME, things will go out of hand with more than one section.
    if (self.tableView.editing) {
        return numberOfObjects + 1;
    } else {
        return numberOfObjects;
    }
}

如果请求,返回插入行的相应单元格:

-(UITableViewCell *)tableView:(UITableView *)tableView
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = nil;

    if ([self isInsertionControl:indexPath]) {
        static NSString *InsertIdentifier = @"InsertCell";
        tableViewCell = [tableView dequeueReusableCellWithIdentifier:InsertIdentifier
                                                        forIndexPath:indexPath];

    } else {
        tableViewCell = [tableView dequeueReusableCellWithIdentifier:self.cellIdentifier
                                                        forIndexPath:indexPath];

        [self configureCell:tableViewCell atIndexPath:indexPath];
    }

    return tableViewCell;
}

这不起作用,任何人都可以帮我找出原因吗?

快速编辑

要清楚,我的故事板中有2个原型单元格,一个用于常规内容,另一个用于表示插入行,两者都有相应的重用标识符。

0 个答案:

没有答案