Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UISplitView中更换my detailViewController在旋转我的应用程序Objective-C时崩溃_Ios_Objective C_Uisplitviewcontroller_Ipad_Screen Rotation - Fatal编程技术网

Ios 在UISplitView中更换my detailViewController在旋转我的应用程序Objective-C时崩溃

Ios 在UISplitView中更换my detailViewController在旋转我的应用程序Objective-C时崩溃,ios,objective-c,uisplitviewcontroller,ipad,screen-rotation,Ios,Objective C,Uisplitviewcontroller,Ipad,Screen Rotation,我有一个带有2个初始控制器的SplitViewController应用程序: leftViewController(主控) rightViewController(详细信息) my rightViewController(详细信息)具有splitViewController的代理,用于显示/隐藏我的菜单(主菜单)的按钮 我的leftViewController(master)是一个菜单应用程序,当我选择menú的任何元素时,我会触发一个连接到我的master的segue,它会为菜单的选定元素

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

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

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

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

*** -[rightViewController respondsToSelector:]: message sent to deallocated instance 
我猜这是因为我的splitViewController想要与它的委托通信,它的旧rightViewController,但是它不见了,它在我的视图中被替换了

也许我需要知道:

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

还尝试在我的新viewController中执行此操作:

@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

也许你必须像你所说的那样将你的代理传递给你的新ViewController。。。为什么不将此添加到leftViewController(主控)中


只需替换序列标识符(showNewViewControllerScene)以与您在故事板上的序列标识符相匹配

也许您必须按照您对newViewController所说的那样传递您的代理。。。为什么不将此添加到leftViewController(主控)中


只需替换序列标识符(showNewViewControllerScene)即可与您在故事板上的序列标识符匹配

由于我正在使用多个Segue,所有这些Segue都必须具有我的UISplitView的代理,而且由于iPhone不支持SplitView,因此我添加了一个条件,仅当用户在任何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];

    }
}

我会回答的

由于我正在使用多个Segue,所有这些Segue都必须具有我的UISplitView的代理,而且由于iPhone不支持SplitView,因此我添加了一个条件,仅当用户在任何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];

    }
}

你能给我看一下密码吗?让我看看如何将密码添加到我原来的帖子中。你能给我看一下密码吗?让我看看如何将密码添加到我原来的帖子中。哇,效果很好,但我会补充你的答案。让我把这个放进去!!!谢谢哇,效果很好,但我会补充你的答案让我把这个放进去!!!非常感谢。
-(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];

    }
}