我有一个TableViewController(favTable.m
)并且在NSFetchedResultsController
的帮助下,它填充了从核心数据模型(具有2个属性的1个实体)中提取的数据。我在导航栏中包含了一个删除按钮,当单击它时,它应该删除表的选定行,以及核心数据模型中的相应对象。我使用下面的代码删除按钮,但它返回错误[favTable delItem]: unrecognized selector sent to instance
。我该怎么办?
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];
}
答案 0 :(得分:1)
您获得例外是因为您的方法的签名是:delItem:cellForRowAtIndexPath:
,而不仅仅是delItem
。
在您的情况下,我认为您不需要tableView
而不是indexPath
作为参数。
相反,将tableView声明为属性(如果从故事板中完成,则将IBOutlet声明)。
@property (nonatomic) IBOutlet UITableView *tableView;
然后您可以使用self.tableView
访问它。
对于选定的行,您可以使用indexPathForSelectedRow
:
NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow;
现在您可以将UIButton的操作重写为:
- (void) deleteSelectedItem {
NSIndexPath *selectedIndexPath = self.tableView.indexPathForSelectedRow;
//Delete the item using your code
}