0

我试图从我的 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;
        }
    }
}
4

0 回答 0