prepareForSegue 未在 tableView 中传递适当的行

prepareForSegue not passing appropriate row in tableView

我有一个 Table 带课程的视图,想在详细视图控制器中传递课程名称。但它总是通过第一行。

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewRowAction *edit = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"edit" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath){
        [self performSegueWithIdentifier:@"editLesson" sender:nil];
    }];



- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"editLesson"]) {
        NSManagedObject *selectedLesson = [self.lessons objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
        EditLessonViewController *destViewController = segue.destinationViewController;
        destViewController.lesson = selectedLesson;
    }
}

您应该在 performSegue 中将 indexPath 作为发件人传递。 有你的代码:

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewRowAction *edit = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"edit" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath){
        [self performSegueWithIdentifier:@"editLesson" sender:indexPath];
    }];



- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"editLesson"]) {
        NSIndexPath* indexPath = (NSIndexPath*)sender;
        NSManagedObject *selectedLesson = [self.lessons objectAtIndex:indexPath.row];
        EditLessonViewController *destViewController = segue.destinationViewController;
        destViewController.lesson = selectedLesson;
    }
}