【发布时间】:2013-10-21 15:54:23
【问题描述】:
我之前有一个工作实现,其中我有一个 TableViewController,我按下 ADD 按钮,它会打开另一个视图控制器,让用户可以将文本添加到字段 - 这反过来又将该信息添加到实体和属性中我可以在表格视图中显示它。实现以下方法,我可以滑动删除一行成功:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self.managedObjectContext deleteObject:[self.transactions objectAtIndex:indexPath.row]];
[self.transactions removeObjectAtIndex:indexPath.row];
[self.tableView reloadData];
NSError *error = nil;
if (![self.managedObjectContext save:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
[self.tableView reloadData];
}
}
}
现在,我成功地实现了 NSFetchedResultsController 以允许添加和获取信息的相同功能,但更安全。我现在无法弄清楚的是如何实际实现相同的滑动删除功能。
我添加了:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
我添加了这个,“滑动”手势无法删除单元格。
在数据源的 NSFetchedReusltsController 代码中,我有:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray
arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray
arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
连同所有必需的方法,但滑动删除操作不起作用。
对此的任何想法都会非常有帮助。
【问题讨论】:
-
创建一个使用core data的空项目,看看FRC和table view delegate方法的实现,应该和你需要的很相似。
-
谢谢丹 - 我做到了,并通过下面的答案,我得到了它的工作。非常感谢您的回答。
标签: ios uitableview core-data nsfetchedresultscontroller