我需要以编程方式在我的应用程序上打开注册表单,视图控制器是在storyborad上创建的,其中包含storybpard ID ViewControllerRegister
,而我用来打开表单的代码是
RegistrationFormViewController *registerView = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerRegister"];
[self presentViewController:registerView animated:NO completion:nil];
但是当我运行应用程序时,我收到错误,如
由于未捕获的异常而终止应用 ' NSInvalidArgumentException',原因:' * - [__ NSArrayM insertObject:atIndex:]:object不能为nil' * 首先抛出调用堆栈:
答案 0 :(得分:1)
1)确保您的故事板名称为" Main"或者不同。
2)检查您是否输入了正确的故事板标识符。
最后,
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
方法。如果它被调用那么一切都很好,你需要检查你在开放控制器的生命周期方法中做了什么。