ami*_*jaj 4 core-data uitableview nsfetchedresultscontroller ios
我以前有一个工作实现,我有一个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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我已成功实现了NSFetchedResultsController以允许添加和获取信息的相同功能,但更安全.我现在无法弄清楚的是如何实际实现相同的滑动来删除功能.
我补充说:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我添加了这个,并且"滑动"手势无法删除单元格.
在数据源的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;
}
}
Run Code Online (Sandbox Code Playgroud)
以及所有必需的方法,但滑动删除操作只是不起作用.
对此有任何想法都会非常有帮助.
Mar*_*n R 11
要从表中删除行,您只需删除相应的Core Data对象:
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self.managedObjectContext deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
// handle error
}
}
Run Code Online (Sandbox Code Playgroud)
这就是全部,特别是你不需要打电话reloadData.删除对象会触发提取的结果控制器委托方法,并更新表视图.
现在从你的代码看来你有一个数据源数组self.transactions.这是错误的,你应该删除它.所有数据源方法都必须直接从获取的结果控制器获取信息.
| 归档时间: |
|
| 查看次数: |
3737 次 |
| 最近记录: |