В простом тестовом приложении я попытался передать объект массива с именем «thisArray» из MasterViewController
в строку с именем «passData» в DetailViewController
. Я использую Storyboards, и UIViewController
встроены в контроллер навигации. Используя метод prepareForSegue
, я успешно прошел данные между UIViewController
:Передача данных между диспетчерами просмотров DidSelectRowsAtIndexPath Storyboards
- (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];
}
}
Теперь по некоторым причинам я хочу использовать didSelectRowsAtIndexPath
вместо prepareForSegue
. Я использовал это:
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
}
Но это не сработало. Я использовал следующее:
- (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];
}
Но это также не сработало.
ВОПРОС:
1) Как правильно написать didSelectRowsAtIndexPath
заменить prepareForSegue
?
2) Если я использую didSelectRowsAtIndexPath
, мне нужно, чтобы удалить соединение SEGUE между UIViewController
в раскадровке?
3) Что делать, если нет действительно никакой связи между Segue контроллерами зрения, как я могу по-прежнему передавать данные между ними с помощью didSelectRowAtIndexPath
?
Спасибо!
UPDATE: На основании ответа и замечании я получил, я написал следующее:
Сначала я удалил связь SEGUE между контроллерами, установите раскадровку идентификатор DetailViewController
, название класса также 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];
}
, но его получение разбился со следующей ошибкой:
*** Terminating app due to uncaught exception
NSInvalidArgumentException
, reason: 'Could not find a storyboard namedDetailViewController
in bundle
знакомства dasblinkenlight в ниже, и изменить свой обновленный код его. Он должен позаботиться о том, что вы пытаетесь сделать!:) – lnafziger
да его сделано. благодаря! – AJ112