如何在“tableview”的单独部分中显示“coredata”中的几个实体?

时间:2015-10-16 05:56:31

标签: ios objective-c core-data nsfetchedresultscontroller

核心数据中有两个不相关的实体。我想在一个UITableView的两个部分中显示这些实体的样本(以及能够在UITableView中添加或删除它们)。

如何实现此任务使用一个UIFetchedResultsController是否可以仅使用一个提取的结果控制器来执行此操作?

更新

使用2个fetchedResultsControllers,但我有错误:

  

由于未捕获的异常'NSRangeException'而终止应用程序,原因:   '*** - [_ PFArray objectAtIndex:]:index(1)超出边界(1)'

这是我的实施代码:

-(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.section == 0) {
        Education* education = [self.fetchedResultsController1 objectAtIndexPath:indexPath];
        cell.textLabel.text = education.educationType;
    } else {
        FamilyStatus* familyStatus = [self.fetchedResultsController2 objectAtIndexPath:indexPath];
        cell.textLabel.text = familyStatus.familyStatusType;
    }
}

#pragma mark - UITableViewDataSource -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    if (section == 1) {

        NSInteger rowsCount;
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController1 sections] objectAtIndex:0];

        if (self.isEdit) {

            rowsCount = [sectionInfo numberOfObjects] + 1;

        } else {

            rowsCount = [sectionInfo numberOfObjects];
        }

        return rowsCount;

    } else {

        NSInteger rowsCount;
        id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController2 sections] objectAtIndex:0];

        if (self.isEdit) {

            rowsCount = [sectionInfo numberOfObjects] + 1;

        } else {

            rowsCount = [sectionInfo numberOfObjects];
        }

        return rowsCount;

    }
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString* cellIdentifier = @"Cell";
    static NSString* addCellIdentifier = @"CellAddButton";

    if (indexPath.section == 0) {

        if (indexPath.row == 0 && self.isEdit) {

            AddViewCell* cell = [tableView dequeueReusableCellWithIdentifier:addCellIdentifier];

            if (!cell) {
                cell = [[AddViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:addCellIdentifier];
            }

            return cell;
        }

        else {

            UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

            if (!cell) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
            }

            if (self.isEdit) {

                NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row-1 inSection:0];
                [self configureCell:cell atIndexPath:path];

            } else {
                [self configureCell:cell atIndexPath:indexPath];
            }

            return cell;
        }

    } else if (indexPath.section == 1) {

        if (indexPath.row == 0 && self.isEdit) {

            UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"aaa"];

            if (!cell) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"aaa"];
            }

            return cell;
        }

        else {

            UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"bbb"];

            if (!cell) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"bbb"];
            }

            if (self.isEdit) {

                NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row-1 inSection:0];
                [self configureCell:cell atIndexPath:path];

            } else {

                [self configureCell:cell atIndexPath:indexPath];
            }

            return cell;
        }
    }

    return nil;
}

1 个答案:

答案 0 :(得分:0)

您不能使用一个FRC,因为它绑定到单个实体。但是,您可以使用一组FRC,每个实体一个,每个部分一个。您需要对索引路径进行一些操作,因为每个FRC都希望为表的第0部分提供数据。