核心数据中有两个不相关的实体。我想在一个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;
}
答案 0 :(得分:0)
您不能使用一个FRC,因为它绑定到单个实体。但是,您可以使用一组FRC,每个实体一个,每个部分一个。您需要对索引路径进行一些操作,因为每个FRC都希望为表的第0部分提供数据。