mhb*_*bdr 1 core-data nsfetchedresultscontroller ios
我有一个UITableView核心数据填充单元格和一个NSFetchedResultsController.我的自定义单元格上有一个自定义按钮,我打算用它来删除单元格.添加标准滑动到删除非常容易,但我宁愿使用此自定义按钮.有谁知道如何将一个动作连接到按钮,该按钮将从数据模型中删除条目并从中删除单元格UITableView?我无法为我的生活找到一个好的解决方案.
编辑:
这是我必须使用标准滑动删除来删除它的代码.我可以用任何方式修改它以使用按钮吗?
if (editingStyle == UITableViewCellEditingStyleDelete) {
[self.tableView beginUpdates];
// Delete the task
Task *taskToDelete = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Deleting (%@)", taskToDelete.name);
[self.managedObjectContext deleteObject:taskToDelete];
[self.managedObjectContext save:nil];
// Delete the row
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self performFetch];
[self.tableView endUpdates];
}
Run Code Online (Sandbox Code Playgroud)
总体概述:
deleteRow:(id)sender;sender会的按钮.获取其superview,然后是superview的superview,依此类推,直到你有了对UITableViewCell的引用.(使用循环搜索isKindOfClass:,不要假设该按钮仅下降1,2,3级.)indexPathForCell:方法将单元格引用转换为索引路径.objectAtIndexPath:获取的成果控制器上获取的对象.然后删除它!如果您正在处理NSFetchedResultsController委托方法,他们将负责删除已删除的行.
示例代码(在没有编译器的情况下输入以进行检查):
- (void)deleteRow:(id)sender
{
id view = [sender superview];
while (view && ![view isKindOfClass:[UITableViewCell class]]) {
view = [view superview];
}
UITableViewCell *cell = view;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSManagedObject *task = [fetchedResultsController objectAtIndexPath:indexPath];
[self.managedObjectContext deleteObject:task];
[self.managedObjectContext save:nil];
}
Run Code Online (Sandbox Code Playgroud)
而已.请勿尝试从表格视图中删除该行.当删除对象时,NSFetchedResultsController将检测更改并更新表视图,假设您按照NSFetchedResultsController文档中的描述设置委托方法.如果还没有,请阅读文档(只需选择 - 双击Xcode中的"NSFetchedResultsController").