我目前正在编写一个应用程序,我遇到的问题似乎是由我没有编写的代码(即 Apple 的类)引起的。UIViewController
我创建了我编写的子类的一个实例。我将它添加为另一个自定义视图控制器的子视图控制器。然后,当我尝试将此新视图控制器的视图添加为父视图控制器视图的子视图时,我会因此错误而崩溃。
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
我已经测试并确定问题是通过尝试将视图添加为子视图而引起的。我引用视图NSLog
只是为了确保导致错误的不仅仅是引用它的行为。我尝试将视图添加为不同视图的子视图,但它也崩溃了,所以问题不在于父视图。最后,我尝试将不同的视图作为子视图添加到父视图并且确实有效,进一步证明父视图很好,并且预期子视图有问题。我分配它的代码是这样的:
ScheduleSelectorViewController* selector = [[ScheduleSelectorViewController alloc] initWithNibName:@"ScheduleSelectorViewController" bundle:nil];
这一直对我有用。我不知道我改变了什么。我对子视图层次结构的内部工作了解不足,无法知道哪个数组是空的并导致了这次崩溃,所以如果有人能帮助我,我将非常感激。
如果有任何其他信息我可以提供,这将有助于让我知道。
更新:
这是它崩溃的代码。我已经放置了 NSLogs 来指示它中断的行。
- (void) addViewControllerToStack:(UIViewController *)controller withKey:(NSString *)key
{
if ( !self.stack ) {
self.stack = [[NSMutableDictionary alloc] init];
}
NSLog(@"subviews %@", [controller.view subviews]);
[[controller view] setFrame:offScreenFrame];
[self addChildViewController:controller];
NSLog(@"code gets to here");
[self.view addSubview:controller.view];
NSLog(@"but not to here");
[self.view bringSubviewToFront:controller.view];
[self.stack setObject:controller forKey:key];
[self.stackKeys addObject:key];
}
作为记录,子视图数组不是零。