Transmitindo dados entre os controladores de exibição DidSelectRowsAtIndexPath Storyboards
Em um aplicativo de teste simples, eu tentei passar um objeto de matriz chamado "thisArray" doMasterViewController
para a uma string chamada "passedData" noDetailViewController
. Eu estou usando Storyboards e oUIViewController
estão embutidos no controlador de navegação. Usando oprepareForSegue
método, eu passei com sucesso os dados entre oUIViewController
:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"pushData"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
DetailViewController *destViewController = segue.destinationViewController;
destViewController.passedData = [thisArray objectAtIndex:indexPath.row];
}
}
Agora, por algumas razões eu quero usardidSelectRowsAtIndexPath
ao invés deprepareForSegue
. Eu usei isso:
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
}
Mas não funcionou. Eu usei o seguinte:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
[self.navigationController pushViewController:detailViewController animated:YES];
}
Mas também não funcionou.
QUESTÃO:
1) Como escrever corretamentedidSelectRowsAtIndexPath
para substituirprepareForSegue
?
2) Se eu usodidSelectRowsAtIndexPath
, preciso remover a conexão de transição entre oUIViewController
no storyboard?
3) E se realmente não houver conexão entre os controladores de visualização, como eu ainda posso passar os dados entre eles usandodidSelectRowAtIndexPath
?
Obrigado!
ATUALIZAÇÃO: Com base na resposta e nos comentários que recebi, escrevi o seguinte:
Primeiro eu removi a conexão entre os controladores, configurei o ID do StoryBoardDetailViewController
, o nome da classe também éDetailViewController
.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"DetailViewController"
bundle:nil];
UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"DetailViewController"];
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
[self.navigationController pushViewController:detailViewController animated:YES];
}
mas está ficando com o seguinte erro:
*** Aplicativo de finalização devido a uma exceção não identificadaNSInvalidArgumentException
, motivo: "Não foi possível encontrar um storyboard chamadoDetailViewController
em pacote