Uitableview 从核心数据模型中删除对象并更新表
我有一个TableViewController(Uitableview 从核心数据模型中删除对象并更新表,uitableview,uibarbuttonitem,delete-row,nsfetchedresultscontroller,Uitableview,Uibarbuttonitem,Delete Row,Nsfetchedresultscontroller,我有一个TableViewController(favTable.m),在NSFetchedResultsController的帮助下,它充满了从核心数据模型中提取的数据(1个实体,2个属性)。我在导航栏中包括了一个删除按钮,单击该按钮时,应该删除表中选定的行以及核心数据模型中的相应对象。我正在使用下面的代码作为删除按钮,但它返回错误[favTable delItem]:发送到实例的无法识别的选择器。我该修什么 UIBarButtonItem *delButton = [[UIBarButton
favTable.m
),在NSFetchedResultsController
的帮助下,它充满了从核心数据模型中提取的数据(1个实体,2个属性)。我在导航栏中包括了一个删除按钮,单击该按钮时,应该删除表中选定的行以及核心数据模型中的相应对象。我正在使用下面的代码作为删除按钮,但它返回错误[favTable delItem]:发送到实例的无法识别的选择器
。我该修什么
UIBarButtonItem *delButton = [[UIBarButtonItem alloc] initWithTitle:@"Del"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(delItem)];
- (void)delItem:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
self.managedObjectContext = ((ecoAppDelegate *) [UIApplication sharedApplication].delegate).managedObjectContext;
FavoritesInfo*favoritesInfo = [self.fetchedResultsController objectAtIndexPath:indexPath];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self.managedObjectContext deleteObject:favoritesInfo];
NSError *error= nil;
if (![self.fetchedResultsController performFetch:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
[self.tableView reloadData];
}您得到异常是因为您的方法的签名是:
delItem:cellforrowatinedexpath:
,而不仅仅是delItem
在您的情况下,我认为您不需要tableView
notindepath
作为参数
相反,将tableView声明为一个属性(如果是从故事板执行的,那么也可以声明为IBOutlet)
然后您可以使用self.tableView
访问它
对于所选行,可以使用indexPathForSelectedRow
:
NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow;
现在,您可以将UIButton的操作重写为:
- (void) deleteSelectedItem {
NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow;
//Delete the item using your code
}
你怎么称呼这个方法?如果这是一个按钮的直接动作,它需要是一个iAction而不是void方法。它是一个通过编程设计的UIBarButton@JayVersluisy您的方法的签名是:
delItem:cellforrowatinedexpath:
,而不仅仅是delItem
。谢谢您的回答。我尝试了您的建议,但出现以下错误:在-[UITableView\u endCellAnimationsWithContext:]、/SourceCache/UIKit\u Sim/UIKit-1914.84/UITableView.m:1037'无效更新:节0中的行数无效。更新(3)后现有节中包含的行数必须等于更新(3)前该节中包含的行数,加上或减去从该节中插入或删除的行数(0插入,1删除),加上或减去移入或移出该节的行数(0移入,0移出)无论如何,这个错误很可能与你的答案无关。你解决了我的问题。谢谢,如果您收到该错误,因为添加/删除单元格时,数据源不会反映该错误。如果你不能解决问题,就发布一个不同的问题。
- (void) deleteSelectedItem {
NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow;
//Delete the item using your code
}