私のルートコントローラーは、静的セルとナビゲーションコントローラーを備えたTableViewControllerです。選択したセルに応じて、構成を適宜変更する別のViewController(TableViewが埋め込まれている)をプッシュします(ボタンが有効かどうか、dbテーブルまたはNSArrayからのセルデータなど)。いくつかの「コントローラーA」セルを選択すると、「コントローラーB」または「コントローラーC」が呼び出され、いくつかのデータが渡されます。
私が試しているコードは次のようになります。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
switch (indexPath.row) {
case 0:
{
[self performSegueWithIdentifier:@"segueToType" sender:self];
}
break;
case 1:
{
[self performSegueWithIdentifier:@"segueToType" sender:self];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"segueToType"])
{
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
NSInteger rowNumber = selectedIndexPath.row;
switch (rowNumber) {
case 0:
{
TypeSelectController *selCon = [segue destinationViewController];
selCon.myPet = self.myPet;
selCon.sel = @"tipo";
selCon.delegate = self;
}
break;
case 1:
{
TypeSelectController *selCon = [segue destinationViewController];
selCon.myPet = self.myPet;
selCon.sel = @"razza";
selCon.delegate = self;
}
break;
default:
break;
}
}
}
この場合、たとえば、「コントローラーB」のみを呼び出していますが、「コントローラーA」の選択したセルに応じて、さまざまな方法で構成されます(「selCon.sel」文字列によって異なります)。
「コントローラーB」には、次のようなコードがあります。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([sel isEqualToString:@"tipo"]) {
NSString *itemToPassBack = [tipi objectAtIndex:indexPath.row];
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack ofType:@"tipo"];
[self.navigationController popViewControllerAnimated:YES];
} else if ([sel isEqualToString:@"razza"]) {
NSString *itemToPassBack = [razze objectAtIndex:indexPath.row];
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack ofType:@"razza"];
[self.navigationController popViewControllerAnimated:YES];
}
}
繰り返しになりますが、文字列「sel」の値に応じて、「コントローラーA」に異なるデータを返します。
コントローラAの最初のセルを選択すると、コントローラBのシーンが正しく取得されます。次に、セルを選択し、正しいデータを使用してコントローラーAに戻ります。ここで、コントローラーAの2番目のセルを選択し、コントローラーBのセルを選択しようとすると、ナビゲーションが希望どおりに応答せず、コントローラーCのシーンが表示され、次にコントローラーAと次のエラーが発生します。
ネストされたプッシュアニメーションにより、ナビゲーションバーが破損する可能性があります
予期しない状態でナビゲーション遷移を終了します。ナビゲーションバーのサブビューツリーが破損する可能性があります。
の外観遷移を開始/終了するための不均衡な呼び出し。
私は何が間違っているのですか?