numberOfRowsInSection中fetchedResultsController的奇怪行为

时间:2012-07-18 11:29:36

标签: uitableview ios5 core-data

我的目标是通过在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控制器是否存在等等,一切似乎都很好,它打破了...... 我是菜鸟,不知道如何解决这个问题: - (

1 个答案:

答案 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];
}