我正在关注本教程Creating a Scrolling Filmstrip Within a UITableView
但不是使用静态数组我使用nsfetchresultscontroller核心数据我有委托问题
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
我想每个单元格只返回一个项目,其中包含所有项目:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ContainerCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ContainerCell"];
NSArray *items = [[[self.frc sections] objectAtIndex:indexPath.section] objects];
[cell setCollectionData:items];
return cell;
}
但是我收到了这个错误:
CoreData: error: Serious application error. An exception was caught from the delegate of NSFetchedResultsController during a call to -controllerDidChangeContent:. attempt to delete row 1 from section 9 which only contains 1 rows before the update with userInfo (null)
如果我正在使用
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSInteger rows = [super tableView:tableView numberOfRowsInSection:section];
return rows;
}
应用程序没有崩溃但我每个单元格都有重复
任何想法如何解决这个问题
由于
答案 0 :(得分:0)
您在部分中使用的是非标准行数,因此必须确保在基础数据更改时删除并添加适当的行数。在你的情况下,没有。
在控制器中查找错误删除或添加行的委托方法。它在您的错误消息中提到,应该是
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
如您所见,在删除案例中,它执行此操作:
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
但indexPath
未在表格视图中描述您的托管对象的位置,因为您在单行中显示某个部分的所有行 。因此,您只需删除此行,并将其替换为该部分中第一个行的相应重新加载函数。也许你有一个{X}样板代码中的configureCell
方法:
NSIndexPath *row = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];
[tableView configureCell:[tableView cellForRowAtIndexPath:row] atIndexPath:row];