Передача данных между

У меня есть два ViewController, соединенных переходом, первый — Sub View, а второй — Sub Tabela. Я хочу передать значение из выбранной строки в этой таблице. от моего первого контроллера представления до моего второго контроллера представления, поэтому я могу определить его заголовок. Вот код.

SubView.m (мой первый ViewController)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // _vinhoArray is the array that I populate the TableView
    NSString *selectedRow = [_vinhoArray objectAtIndex:indexPath.row];
    // Sub Tabela is the name of Second View
    SubTabela *subTabela = [[SubTabela alloc] init];
    // tituloTabela is a NSString in my Second View
    subTabela.tituloTabela = linhaSelecionada;

    // Here i get the Right value
    NSLog(@"value %@", subTabela.tituloTabela);

}

SubTabela.h (Мой второй ViewController)

@property (nonatomic, strong) NSString *tituloTabela;

SubTabela.m

@synthesize tituloTabela;

- (void)viewDidLoad
{

    [super viewDidLoad];

    self.title = tituloTabela;

    // Here i get the a Null value
    NSLog(@"value %@", tituloTabela);

}

Пожалуйста помоги!


person Diego Rodrigues    schedule 20.01.2014    source источник
comment
где код открытия экрана? это очень важно, так как я думаю, что вижу вашу ошибку   -  person Simon McLoughlin    schedule 20.01.2014
comment
Экран открывается переходом. Извините, если я не понимаю, я очень новичок в разработке.   -  person Diego Rodrigues    schedule 20.01.2014
comment
Да, я не использую переход, но вы не добавили код, который вызывает переход, в свой вопрос.   -  person Simon McLoughlin    schedule 20.01.2014
comment
@SimonMcLoughlin, так когда и как я вызываю этот метод?   -  person Diego Rodrigues    schedule 20.01.2014


Ответы (1)


Я не думаю, что вы правильно передаете свои данные, похоже, вы создаете объект внутри своего didSelectRowAtIndexPath и передаете данные в него, а затем отбрасываете этот объект. Что вам нужно сделать, это вызвать это:

[self performSegueWithIdentifier:<#(NSString *)#> sender:self];

чтобы изменить экран, а затем передать данные, как это prepareForSegue обратный вызов

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    SubTabela *vc = (SubTabela *)segue.destinationViewController;
    vc.tituloTabela = linhaSelecionada;
}
person Simon McLoughlin    schedule 20.01.2014
comment
Но я не должен передавать значение внутри didSelectRowAtIndexPath? Как я не могу получить значение из выбранной строки? - person Diego Rodrigues; 20.01.2014
comment
@DiegoRodrigues, но вы не передаете данные внутри didSelectRowAtIndexPath, вы создаете переменную с именем subTabela, вы устанавливаете данные, а затем больше не используете этот объект, поэтому он нигде не используется. Затем, когда вы вызываете переход, он снова создает этот viewController без данных, которые вы установили для первого. Вам нужно создать переменную вне метода didSelectRowAtIndexPath, вызвать переход в обратном вызове didSelectRowAtIndexPath и передать данные, как я показал. - person Simon McLoughlin; 20.01.2014
comment
@DiegoRodrigues то, что вы создаете subTabela, не означает, что все, что вы с ним делаете, влияет на все subTabela в вашем приложении. Вы можете иметь много одного и того же класса и передавать им разные значения, используя приведенное выше - person Simon McLoughlin; 20.01.2014
comment
Если вызвать метод [self performSegueWithIdentifier:<#(NSString *)#> sender:self]; внутри didSelectRowAtIndexPath, я получаю эту ошибку, и моя панель навигации не работает. 2014-01-20 15:33:36.885 Prototipo[2001:70b] вложенная анимация push может привести к повреждению панели навигации неожиданное состояние. Дерево подпредставления панели навигации может быть повреждено. - person Diego Rodrigues; 20.01.2014
comment
@DiegoRodrigues ошибка говорит о том, что вы пытаетесь нажать несколько раз. Вы ушли во время другого звонка, чтобы вызвать переход? Вот почему я дважды просил вас отредактировать ваш вопрос и показать эту часть вашего кода! выньте любой другой вызов, чтобы нажать переход, и все должно быть в порядке - person Simon McLoughlin; 20.01.2014