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

时间:2013-08-06 20:36:25

标签: ios uiviewcontroller storyboard ecslidingviewcontroller

我正在使用故事板在视图之间切换。非常简单,直到我尝试添加ECSlidingViewController。

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

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

如果我将@“Main”设置为@“Speakers”,视图加载就好了。我得到幻灯片菜单和一切。 @“Main”也加载得很好。

但是,如果我首先在上面的代码中加载@“Main”,然后将视图切换到我指定的“Speakers”,当我尝试使用此代码调用幻灯片菜单时,它会崩溃:< / p>

   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不能为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];

如果我没有调出幻灯片菜单,每个工作都很好,但是当我添加幻灯片手势时每个都会导致崩溃。

想法?

1 个答案:

答案 0 :(得分:1)

好的,我明白了。经过漫长而艰苦的经历后,我想出来了。

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

InitViewController

MenuViewController

MainViewController

SpeakersView

目标是使用不在幻灯片菜单上的按钮切换到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,它自动切换到扬声器或我设置的位置。

感谢大家的帮助。