我试图从我的 splitviewcontroller 主视图加载 3 个详细视图。所有这些都是通过 ios 5 和 XCode 4.2 中的故事板设置的。详细视图 A 是它自己的类。详细视图 C 是详细视图 B 的子类。
master其实是一个TabBarViewController。
- 选项卡 A 连接到一个 UITableViewController(连接到主 A),它连接到另一个 UITableViewController(连接到主 B)
- Tab B 也连接到 UITableViewController(连接到主 C)
我的设计中是否存在根本缺陷,尝试使用 performSegueWithIdentifier 切换详细视图?
我最终得到了一个对我这个新手没有帮助的 sigabort。
这是正在发生的事情:
- 从主 A 开始 - 细节 A 显示正常
- 切换到主 B - 细节 B 显示正常
- 切换回主 A - 细节 A 再次正常显示
- 完成对细节 B 的 segue 时再次切换到 master B - sigabort
我还没有连接细节 C。我想从所有大师切换到细节 C,甚至细节 A 和 B。
退出 prepareForSegue 时会发生 sigabort。每个 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;
}
}
}