1

我有一个带有 2 个初始控制器的 SplitViewController 应用程序:

  • 左视图控制器(主)
  • rightViewController(详细)

我的 rightViewController(详细信息)具有 splitViewController 的代表,用于显示显示/隐藏我的菜单(主)的按钮

我的 leftViewController (master) 是一个菜单应用程序,当我选择菜单的任何元素时,我会触发连接到我的 master 的 segue,它会替换我的 detailViewController 以用于菜单的选定元素

当我这样做时,如果我尝试旋转我的 iPhone 以隐藏菜单,我的应用程序崩溃并说:

*** -[rightViewController respondsToSelector:]: message sent to deallocated instance 

我猜这是因为我的 splitViewController 想与它的委托进行通信,它的旧 rightViewController,但它已经消失了,它已在我的视图上被替换,

也许我需要是否:

将我的委托重新分配给我的新 viewController(详细信息)或删除我的 rightViewController 的委托,然后将其分配给我的 newViewController

在我的新视图控制器中也试过这个:

@interface newViewController ()<UISplitViewControllerDelegate>

@end

@implementation newViewController 


- (void)viewDidLoad
{

    UISplitViewController *splitViewController = (UISplitViewController *)self.view.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;
}
...
@end

但仍然无法正常工作......我收到了同样的信息

我该如何解决???

提前致谢

编辑:添加我的 segue 代码以帮助回答我的问题

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"viewSceneAgenda"]) {

        [segue.destinationViewController setTitle:@"Citas"];
        [segue.destinationViewController setUserIDElement:UID_CUS];
        [segue.destinationViewController setOverallAppointments:overallDates];

    }
}
4

2 回答 2

6

也许你必须将你的委托传递给你的 newViewController ......你为什么不把它添加到你的 leftViewController (主)......

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if ([segue.identifier isEqualToString:@"showNewViewControllerScene"]) {

        UISplitViewController *splitViewController = (UISplitViewController *)self.view.window.rootViewController;
        splitViewController.delegate = segue.destinationViewController;

    }
}

只需替换 segue 标识符 (showNewViewControllerScene) 以匹配您故事板上的标识符

于 2013-09-20T18:34:54.993 回答
1

要补充耶稣的答案

由于我正在使用多个 segue,它们都必须具有我的 UISplitView 的委托,而且由于 iPhone 不支持拆分视图,我添加了一个条件来分配委托,只要用户在任何 iPad 上运行此应用程序

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{


    if ([[UIDevice currentDevice].model hasPrefix:@"iPad"]) {
        UISplitViewController *splitViewController = (UISplitViewController *)self.view.window.rootViewController;
        splitViewController.delegate = segue.destinationViewController;
    }

    if ([segue.identifier isEqualToString:@"viewSceneAgenda"]) {

        [segue.destinationViewController setTitle:@"Citas"];
        [segue.destinationViewController setUserIDElement:UID_CUS];
        [segue.destinationViewController setOverallAppointments:overallDates];

    }
}
于 2013-09-20T19:04:49.400 回答