IOS以编程方式打开新视图控制器

时间:2016-02-08 11:11:59

标签: ios objective-c uiviewcontroller

我需要以编程方式在我的应用程序上打开注册表单,视图控制器是在storyborad上创建的,其中包含storybpard ID ViewControllerRegister,而我用来打开表单的代码是

RegistrationFormViewController *registerView = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerRegister"];
          [self presentViewController:registerView animated:NO completion:nil];

但是当我运行应用程序时,我收到错误,如

  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:' * - [__ NSArrayM   insertObject:atIndex:]:object不能为nil'       * 首先抛出调用堆栈:

3 个答案:

答案 0 :(得分:1)

1)确保您的故事板名称为" Main"或者不同。

enter image description here

2)检查您是否输入了正确的故事板标识符。

enter image description here

最后,

3)有时Xcode无法找到self.storyboard的故事板。 尝试提及具有实际名称的故事板,例如

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

        RegistrationFormViewController *registrationFormViewController = [storyBoard instantiateViewControllerWithIdentifier:@"RegistrationFormViewController"];
        [self presentViewController:registrationFormViewController animated:YES completion:nil];

答案 1 :(得分:1)

  

[__ NSArrayM insertObject:atIndex:]:object不能为nil,错误说在代码中查找任何表示“insertObject:atIndex:”的行。你插入的对象显然是零。

确保在将任何对象添加到其中之前已初始化名为XXXX的阵列...

NSMutableArray *xxx=[[NSMutableArray alloc]init];

并停止向其添加任何nil对象......

if(str) //or if(str != nil) or if(str.length>0)
{
//add the str into xxx array.
}
else
{
 //add the empty value to your xxx array
}

答案 2 :(得分:1)

代码中以编程方式加载视图控制器没有问题。您必须使用断点检查是否在您的开放控制器中调用了viewDidLoad方法。如果它被调用那么一切都很好,你需要检查你在开放控制器的生命周期方法中做了什么。