我的目标是通过在fetchedResultsController上填充所有获取结果的数据来填充tableview的一部分。这非常简单,就像一个魅力。
我的小应用程序的第二部分是在同一个表的另一部分中添加属性“price”。它很好用。
这是我过去常常实现的目标:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (section == 1) {
return 1;
} else return [self.fetchedResultsController.fetchedObjects count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0) {
static NSString *ci = @"CellTotal";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:ci];
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:0];
float expense = 0;
for (NSManagedObject *object in [sectionInfo objects]) {
expense += [[object valueForKey:@"precio"] floatValue];
}
cell.textLabel.text = [NSString stringWithFormat:@"%f", expense];
return cell;
} else {
static NSString *ci = @"Cell";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:ci];
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath{
Gastos *g = (Gastos *)[self.fetchedResultsController objectAtIndexPath:indexPath];
cell.detailTextLabel.text = g.nombre;
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setMinimumFractionDigits:2];
[f setMaximumFractionDigits:2];
NSString *precio = [f stringFromNumber: g.precio];
cell.textLabel.text = precio;
}
当我想更改tableview中各节的顺序时,问题出现了。如果我想在第0部分中显示总添加内容,并在第1部分中显示fetchedresults列表,那么我的应用程序会因错误而崩溃:
由于未捕获的异常'NSRangeException'而终止应用程序,原因: ' * - [__ NSArrayM objectAtIndex:]:索引1超出边界[0 .. 0]'
关于我做错的任何想法?非常感谢任何帮助,谢谢!
更新 这是代码破坏app的地方:
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath{
Gastos *g = (Gastos *)[self.fetchedResultsController objectAtIndexPath:indexPath];
它似乎正在处理第一个获取的对象,但在第二个时失败。我真的在努力解决这个问题。我一直在调试,检查fetch控制器是否存在等等,一切似乎都很好,它打破了...... 我是菜鸟,不知道如何解决这个问题: - (
答案 0 :(得分:2)
您有一个包含2个部分的表格视图。第二部分由FRC填充(只有一个部分)。 因此,表格视图中的第1部分对应于FRC中的第0部分。
使用表视图的indexPath(section == 1)调用configureCell:atIndexPath:
方法,但必须使用section == 0调用objectAtIndexPath
。所以你必须像这样调整节号:< / p>
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *frcIndexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:(indexPath.section - 1)];
Gastos *g = (Gastos *)[self.fetchedResultsController objectAtIndexPath:frcIndexPath];
}