如何通过引用将对象从一个类传递到另一类?

时间:2019-01-10 12:55:18

标签: ios objective-c iphone

我通过点击当前控制器的单元格来初始化一个新的视图控制器。我想通过引用将单元格中的对象传递给下一个控制器,以便在新控制器中更改对象时,它应该在原始位置更改。

我已经竭尽全力获得有关此问题的答案,但是却无济于事。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString * storyboardName = @"Main";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
    RecentItemDetailViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"RecentItemDetailViewController"];

    vc.station = self.stations[indexPath.row];
    [self.navigationController pushViewController:vc animated:YES];
}

我想通过引用获取self.stations[indexPath.row]中的vc.station对象,因此,如果我更改了vc.station,那么self.stations[indexPath.row]也应该更改。

self.stationsvc.station均为NSMutableArray类型。

1 个答案:

答案 0 :(得分:2)

您已经正确执行了。您最有可能丢失的是回来时重新加载表视图。

您可以覆盖视图将出现的方法。然后检查表视图中的选定行是什么。重新加载该行。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if(self.tableView.indexPathForSelectedRow) {
        [self.tableView reloadRowsAtIndexPaths:@[tableView.indexPathForSelectedRow] withRowAnimation:UITableViewRowAnimationAutomatic];
        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
    }

    // Or just reload  the whole thing
    [self.tableView reloadData];
}

但这自然假设您永远都不会分配给station内的RecentItemDetailViewController属性。您可以叫[self.station add...]之类的东西,但不能叫self.station = ...