我有一个带有 2 个初始 Controller 的 SplitViewController 应用程序:
我的 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/