应用程序试图在目标上呈现一个 nil 模态视图控制器
Posted
技术标签:
【中文标题】应用程序试图在目标上呈现一个 nil 模态视图控制器【英文标题】:Application tried to present a nil modal view controller on target 【发布时间】:2013-08-27 09:38:34 【问题描述】:我有一个简单的单视图应用程序,其中包含两个故事板,纵向和横向布局不同。景观布局完全不同,这就是我使用第二个故事板的原因。
当我切换到横向时,视图没有改变,我得到了
“”
` 调试器中的错误。我检查了风景故事板是否引用了 CalculatorViewController 类。
这是产生错误的代码行:
[self presentViewController:landscapeViewController animated:YES completion:nil];
这是来自 CalculatorViewController.m 的整个方法:
- (void)orientationChanged:(NSNotification *)notification
UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
!isShowingLandscapeView)
// code here to show landscape storyboard
UIStoryboard *landscapeStoryboard = [UIStoryboard storyboardWithName:@"LandscapeStoryboard" bundle:nil];
CalculatorViewControllerLandscape *landscapeViewController = [landscapeStoryboard instantiateInitialViewController];
[self presentViewController:landscapeViewController animated:YES completion:nil];
isShowingLandscapeView = YES;
else if (UIDeviceOrientationIsPortrait(deviceOrientation) &&
isShowingLandscapeView)
[self dismissViewControllerAnimated:YES completion:nil];
isShowingLandscapeView = NO;
初始视图控制器称为 CalculatorViewController。 横向布局的视图控制器称为 CalculatorViewControllerLandscape。
这是我的第一个应用程序,所以我非常感谢任何帮助。我已尝试在未成功发布的类似问题中找到解决方案。
【问题讨论】:
别忘了接受 Gabriele Petronella 的回答。看来他终于帮到你了。 【参考方案1】:表示landscapeViewController
是nil
。
这可能是由以下任一原因引起的:
landscapeStoryboard
是 nil
(很可能是因为找不到名为 LandscapeStoryboard
的故事板)
情节提要中未指示初始视图控制器。
【讨论】:
我已经仔细检查了拼写和大小写,并且 LandscapeStoryboard 肯定存在。CalculatorViewController 被设置为初始视图控制器。 你能检查storyboard
是否是nil
吗?使用断点或NSLog
我没有在 LandscapeStoryboard 中选中初始视图控制器检查框。当我这样做时,我得到一个不同的错误:NSUnknownKeyException',原因:'[aButton
的悬空出口。在 Interface Builder 中检查 CalculatorViewControllerLandscape
上的每个插座
我设置了一个断点,它显示 LandscapeStoryboard = (UIStoryboard *)0x07175c40。【参考方案2】:
您需要确保情节提要横向视图的标识符设置为“LandscapeStoryboard”。选择情节提要并检查标识符。
【讨论】:
LandscapeStoryboard
是故事板的名称而不是控制器的名称(duh)
现在你的回答没有意义。故事板是按文件名查找的,因此您只需选择正确的名称即可。没有要设置的标识符。
实际上,如果我也删除标识符,它也可以工作。我做的另外两件事是重置风景故事板类,即使它设置正确,也将故事板名称复制并传递到代码中,即使它也拼写正确。奇怪但现在有效。谢谢你们的帮助。正弦
@Gabriele Petronella,我通常使用self.ViewLandscapeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LandscapeViewController"];
,它使用标识符。但在这种情况下,您可能是对的。
@Sinead,你真的应该考虑接受 Gabriele Petronella 的回答。他在帮助你方面做得很好!以上是关于应用程序试图在目标上呈现一个 nil 模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在目标上呈现一个 nil 模态视图控制器
应用程序试图在目标 <UIApplicationRotationFollowingController: 0x100c75280> 上呈现一个 nil 模态视图控制器
应用程序试图在 React Native Objective-C 扩展中的目标上呈现一个 nil 模态视图控制器