我的目标是通过填充 fetchedResultsController 上所有获取结果的数据来填充 tableview 的一部分。这是非常简单的,就像一个魅力。
我的小应用程序的第二部分是在同一张表的另一部分添加属性“价格”。它工作正常。
这是我用来实现的:
- (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;
}
当我想更改表格视图中各部分的顺序时,问题就出现了。如果我想在第 0 节中显示总添加量,在第 1 节中显示 fetchedresults 列表,那么我的应用程序会因错误而崩溃:
由于未捕获的异常“NSRangeException”而终止应用程序,原因:“ * -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]”
关于我做错了什么的任何想法?非常感谢任何帮助,谢谢!
更新 这是代码破坏应用程序的地方:
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath{
Gastos *g = (Gastos *)[self.fetchedResultsController objectAtIndexPath:indexPath];
看起来像是在处理第一个获取的对象,但在第二个对象上失败了。我真的很纠结这个问题。我一直在调试,检查 fetch 控制器是否存在等,一切似乎都很好,但它坏了......我是一个菜鸟,不知道如何解决这个问题:-(