iOS添加菜单在不是第一次查看时会导致崩溃

Posted

技术标签:

【中文标题】iOS添加菜单在不是第一次查看时会导致崩溃【英文标题】:iOS Adding Menu Causes Crash When Not First View 【发布时间】:2013-08-06 20:36:25 【问题描述】:

我正在使用情节提要在视图之间切换。很简单,直到我尝试添加 ECSlidingViewController。

如果我将上面的幻灯片菜单添加到我调用的第一个视图中:

self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Main"];

如果我将@"Main" 设置为@"Speakers",则视图加载得很好。我得到了幻灯片菜单和一切。 @"Main" 也可以正常加载。

但是,如果我像上面的代码一样首先加载@“Main”,然后将视图切换到我指定的“扬声器”,一旦我尝试使用此代码调用幻灯片菜单,它就会崩溃:

   if(![self.slidingViewController.underLeftViewController isKindOfClass:[MenuViewController class]]) 
    self.slidingViewController.underLeftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];
   

   [self.view addGestureRecognizer:self.slidingViewController.panGesture];

我收到一个崩溃说明:* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[__NSArrayM insertObject:atIndex:]: object cannot be nil”

我尝试过多种方式切换视图。

我试过了:

SpeakersView *second= [self.storyboard instantiateViewControllerWithIdentifier:@"Speakers"];
[self presentViewController:second animated:YES completion:nil];

我试过了:

  SpeakersView *svc = [self.storyboard instantiateViewControllerWithIdentifier:@"Speakers"];

[self presentViewController:svc animated:YES completion:nil];

如果我不调用滑动菜单,每个都可以正常工作,但是当我添加滑动手势时,每个都会导致崩溃。

想法?

【问题讨论】:

在调用addGestureRecognizer之前使用NSLog显示self.slidingViewControllerself.slidingViewController.panGesture的值。它显示了什么? @PhillipMills 我得到以下内容,分别对应您的要求:2013-08-07 10:00:42.341 IndustryForumAppV2[2109:11303] (null) 303311328 2013-08-07 10:00 :42.343 IndustryForumAppV2[2109:11303] (null) 303311328 @PhillipMills 这是我将课程设置为先出来时得到的结果:2013-08-07 10:19:53.706 IndustryForumAppV2[2207:11303] 300217184 2013-08 -07 10:19:53.708 IndustryForumAppV2[2207:11303] ; target= )>> 300217184 崩溃的完整堆栈跟踪是什么? 不幸的是,这不是象征性的。请参阅***.com/questions/10878035/… 了解如何从调试器获取符号化堆栈跟踪。将其放入调试器后,您可以从侧边栏中选择堆栈帧并复制。 【参考方案1】:

好的,我想通了。经过漫长而艰苦的经历,我想通了。

所以我有很多文件(每个文件都是 .m 和 .h):

初始化视图控制器

菜单视图控制器

主视图控制器

演讲者视图

目标是使用不在幻灯片菜单上的按钮从 MainViewController 切换到 SpeakersView,但这样做会直接导致幻灯片菜单为空,正如 Phillip Mills 所指出的那样。

相反,我将它放在 InitViewController.h 中,就在 @Interface 的下方:

@property (nonatomic, retain) NSString *location;

然后这个在InitViewController.m中@implementation下:

@synthesize location;

我最初在 InitViewController.m 的 ViewDidLoad 下有这个:

self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Main"];

我改成这样了:

if([location length] == 0)location = @"Main";
self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:location];

这样如果变量为空,则默认为@"Main"。

然后在 MainView.m 中,我按下按钮后执行代码,我有这个:

InitViewController *ini;
ini = [self.storyboard instantiateViewControllerWithIdentifier:@"Init"];
ini.location = @"Speakers";

瞧,视图切换到扬声器就好了。更准确地说,它切换到 InitViewController,它会自动切换到扬声器或我设置的任何位置。

感谢大家的帮助。

【讨论】:

以上是关于iOS添加菜单在不是第一次查看时会导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中打开一个关闭的 NSWindow 会导致应用程序崩溃

iOS MKLocalSearch导致崩溃[重复]

jquery组件ztree问题:为啥添加新节点时会自动添加2个以上的新节点

为啥我的 iPhone 应用程序的发布版本在安装后第一次运行时会在设备上崩溃?

iOS 滑出菜单导致应用程序崩溃。怎么修?

iOS开发过程中,遇到解析的json数据为<null>,进行赋值时会导致崩溃,使用AFNetworking可以这样解决。