Ios 在UISplitView中更换my detailViewController在旋转我的应用程序Objective-C时崩溃
我有一个带有2个初始控制器的SplitViewController应用程序: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,它会为菜单的选定元素
- leftViewController(主控)
- rightViewController(详细信息)
*** -[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];
}
}