Как передать объект по ссылке из одного класса в другой класс? - PullRequest
0 голосов
/ 10 января 2019

Я инициализирую новый контроллер вида, коснувшись ячейки текущего контроллера. Все, что я хочу, чтобы передать объект в ячейке следующему контроллеру по ссылке, чтобы, если я изменю объект в новом контроллере, он изменился в исходном месте.

Я много пытался получить ответ об этом, но нигде не смог.

- (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.stations и vc.station оба имеют тип NSMutableArray.

1 Ответ

0 голосов
/ 10 января 2019

Вы уже сделали это правильно. Скорее всего, вам не хватает перезагрузить представление таблицы, когда вы вернетесь.

Вы можете переопределить вид появится метод. Затем проверьте, какая строка выбрана в представлении таблицы. Перезагрузите этот ряд.

- (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 = ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...