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.slidingViewController
和self.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] 好的,我想通了。经过漫长而艰苦的经历,我想通了。
所以我有很多文件(每个文件都是 .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 会导致应用程序崩溃
jquery组件ztree问题:为啥添加新节点时会自动添加2个以上的新节点
为啥我的 iPhone 应用程序的发布版本在安装后第一次运行时会在设备上崩溃?
iOS开发过程中,遇到解析的json数据为<null>,进行赋值时会导致崩溃,使用AFNetworking可以这样解决。