splitviewcontrollerマスタービューからロードしようとしている3つの詳細ビューがあります。これらはすべて、iOS5およびXCode4.2のストーリーボードを介してセットアップされました。詳細ビューAは独自のクラスです。詳細ビューCは、詳細ビューBのサブクラスです。
マスターは実際にはTabBarViewControllerです。
- タブAは、別のUITableViewController(マスターBに接続されている)に接続されているUITableViewController(マスターAに接続されている)に接続されています
- タブBはUITableViewController(マスターCに接続されている)にも続きます
PerformSegueWithIdentifierで詳細ビューを切り替えようとしている私のデザインに根本的な欠陥はありますか?
私は最終的に、私が初心者には役に立たないシガボルトを手に入れます。
何が起こっているのか:
- マスターAから開始-詳細Aは正常に表示されます
- マスターBに切り替えます-詳細Bは正常に表示されます
- マスターAに戻ります-詳細Aが再び正常に表示されます
- 再びマスターBに切り替えます-詳細Bへのセグエを終えたらsigabort
詳細Cはまだ接続していません。すべてのマスターから詳細C、さらには詳細AとBに切り替えたいと思います。
sigabortは、prepareForSegueを終了するときに発生します。各prepareForSegueは、私が思っていることを実行しているようです。これはすべて、シミュレータのランドスケープモードで発生しています。
私はstackoverflowの検索、ドキュメントの閲覧、例の確認に多くの時間を費やしてきました。ストーリーボードにビュー間の接続を反映させようとしています。performSegueWithIdentifierは、マスタービューが変更されたときに詳細ビュー間を移行する自然な方法でした。
何がわからないの?
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ImageVC"]) {
// Get a pointer to the dictionary at the currently selected row index
NSDictionary *photoDictionary = [self.photoList objectAtIndex:self.tableView.indexPathForSelectedRow.row];
// NSLog(@"%@", photoDictionary);
// Set up the photo descriptions in the PhotoDescriptionViewController
[[segue destinationViewController] setPhotoDictionary:photoDictionary];
} else if ([segue.identifier hasSuffix:@"MapVC"]) {
if ([self splitViewMapViewController]) {
[self splitViewMapViewController].annotations = [self mapAnnotations];
[self splitViewMapViewController].delegate = self;
} else {
[[segue destinationViewController] setAnnotations:[self mapAnnotations]];
[[segue destinationViewController] setDelegate:self];
}
}
}
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillAppear:animated];
NSLog(@"Super class:%@", [self superclass]);
NSLog(@"Class:%@", [self superclass]);
if ([self.splitViewController.viewControllers lastObject]) { // in a split controller, load detail view
if ([self isMemberOfClass:[PhotoListTableViewController class]]) {
#if TEST > 0
NSLog(@"Segue to PhotoListMapVC");
#endif
[self performSegueWithIdentifier:@"PhotoListMapVC" sender:self];
} else if ([self isKindOfClass:[PhotoListTableViewController class]]) {
#if TEST > 0
NSLog(@"Segue to RecentsMapVC");
#endif
[self performSegueWithIdentifier:@"RecentsMapVC" sender:self];
} else {
NSLog(@"PhotoListTableViewController:viewWillAppear unexpected class %@", [self class]);
return;
}
}
}