簡単なテスト アプリで、"thisArray" という名前の配列オブジェクトを から "passedData"MasterViewController
という名前の文字列に渡そうとしましたDetailViewController
。ストーリーボードを使用しておりUIViewController
、ナビゲーション コントローラー内に埋め込まれています。メソッドを使用してprepareForSegue
、次の間でデータを正常に渡しましたUIViewController
。
- (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
replaceを正しく書く方法はprepareForSegue
?
2)を使用する場合、ストーリーボードdidSelectRowsAtIndexPath
の 間のセグエ接続を削除する必要がありUIViewController
ますか?
3)ビュー コントローラー間にセグエ接続が実際にない場合、どのように使用してそれらの間でデータを渡すことができdidSelectRowAtIndexPath
ますか?
ありがとう!
更新: 回答と受け取ったコメントに基づいて、次のように書きました。
最初に、コントローラー間のセグエ接続を削除し、StoryBoard id を設定しました。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];
}
しかし、次のエラーでクラッシュします:
*** 例外がキャッチされていないため、アプリを終了します。理由: 「バンドルで
NSInvalidArgumentException
指定されたストーリーボードが見つかりませんでした」DetailViewController