使用performSegueWithIdentifier加载多个splitviewcontroller详细信息视图

时间:2012-08-19 02:03:53

标签: ios storyboard uisplitviewcontroller segue

我正在尝试从我的splitviewcontroller主视图加载3个详细视图。所有这些都是通过ios 5和XCode 4.2中的故事板设置的。详细信息视图A是它自己的类。详细视图C是详细视图B的子类。

master实际上是一个TabBarViewController。

  • 标签A转到UITableViewController(连接到主A),它转移到另一个UITableViewController(连接到主B)
  • 选项卡B也可以使用UITableViewController(连接到主C)

我的设计是否存在根本缺陷,尝试使用performSegueWithIdentifier切换详细视图?

我最终得到了一个对我这个新手没有帮助的sigabort。

以下是发生的事情:

  • 从主A开始 - 详细信息A显示正常
  • 切换到主B - 细节B显示正常
  • 切换回主A - 详细信息A再次显示
  • 完成segue到细节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;
        }
    }
}

0 个答案:

没有答案