ios - 在 UISplitView 中替换我的 detailViewController 在旋转我的应用程序 Objective-C 时崩溃

标签 ios objective-c uisplitviewcontroller ipad screen-rotation

我有一个带有 2 个初始 Controller 的 SplitViewController 应用程序:

  • leftViewController (主)
  • rightViewController(详细)

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

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

    当我这样做时,如果我尝试旋转我的 iPhone 以隐藏菜单,我的应用程序崩溃并说:
    *** -[rightViewController respondsToSelector:]: message sent to deallocated instance 
    

    我猜是因为我的 splitViewController 想要与它的委托(delegate)进行通信,它的旧 rightViewController,但是它已经消失了,它已经在我的 View 上被替换了,

    也许我需要是否:

    将我的委托(delegate)重新分配给我的新 View Controller (详细)
    或者
    删除我的 rightViewController 的委托(delegate),然后将其分配给我的 newViewController

    在我的新 View Controller 中也试过这个:
    @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];
    
        }
    }
    

    最佳答案

    也许您必须将您的委托(delegate)传递给您对 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) 以与您的 Storyboard上的匹配

    关于ios - 在 UISplitView 中替换我的 detailViewController 在旋转我的应用程序 Objective-C 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18922531/

    相关文章:

    ios - 类方法中的static关键字是什么意思

    ios - sqlite ios : attempt to write a readonly database

    ios - 绘制矩形导致错误,无法引用 myview

    iphone - 如何获取当前接入点的 MAC 地址/BSSID?

    ios - 多个 Split View Controller

    ios - 从 Firebase 存储下载时出错

    ios - 调出一个数组,objectAtIndex

    objective-c - 数据源对象属于哪里? Controller 还是模型?

    iphone - 从 UISplitViewController 中删除分隔线

    ios - 子类化 UISplitViewController 时的奇怪错误