如何在UITableView的动态部分中实现固定行数?

时间:2014-04-04 01:30:31

标签: ios uitableview ios7

我想要完成的是显示基于查询的部分(因此部分的数量不固定),但每个部分始终只显示1行。

我可以通过实施numberOfRowsInSection来实现这一目标:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

所以看起来很好。但是,当我从Core Data支持的存储中删除一行时(例如在另一个Controller中),我总是会收到这样的错误:

“断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-2935.137 /UITableView.m:1114 2014-04-03 18:31:22.453 TestApplication [70450:60b] CoreData:错误:严重的应用程序错误。在调用-controllerDidChangeContent:期间,从NSFetchedResultsController的委托中捕获到异常。尝试删除第1部分中的第2行,该部分在使用userInfo(null)“

更新之前仅包含1行

我不确定为什么会这样。正如我所说,一切似乎都很好,但是当我删除一行时会出现问题。有任何想法吗?我可以根据需要发布代码,但不确定在哪里查看。

这是我的删除代码:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
        [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];

        NSError *error = nil;
        if (![context save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }
    }
}
编辑:也许我做错了,不应该试图在这里强制使用NSFetchedResultsController?

2 个答案:

答案 0 :(得分:0)

这是有道理的,因为你只返回一行。

你需要有某种类型的条件。

例如使用bool:

return isDeledted ? 0 : 1 ;

删除后不要返回任何内容,您可以将此bool设置为true。

答案 1 :(得分:0)

您应遵循以下规则:http://aplus.rs/2014/one-not-weird-trick-to-save-your-sanity-with-nsfetchedresultscontroller/

摘要:在您的所有NSFetchedResultsController委托方法中,检查您是否在窗口中:

 if (self.tableView.window == nil) {
     [self.tableView reloadData]; // Add this only in begin/end updates
     return;   
 }