我正在编写一个应用程序,我遇到的问题似乎是由我没写的代码(即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];
这一直对我有用。我不知道它是什么我改变了。我不太了解子视图层次结构的内部工作原理,知道哪个数组是空的并且导致了这个崩溃,所以如果有人能帮助我,我将非常感激。
如果有任何其他信息我可以提供,这有助于让我知道。
更新:
这是崩溃的代码。我已经放置了NSLog来指示它断开的行。
- (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];
}
对于记录,子视图数组不是nil。
答案 0 :(得分:2)
检查您是否在某处设置了视图的 .hidden = YES;
我拉了我的头发超过一个小时,发现我正在隐藏我的寻呼机控件并尝试稍后设置pageIndicatorTintColor
属性,这也会使数组超出界限问题。
答案 1 :(得分:0)
请确保在未调用init
方法的情况下,未覆盖initWithNibName
中的ScheduleSelectorViewController
/ super
方法。
当然,您始终可以在控制台中打印出[self.view subviews]
父视图,以了解子视图数组是否为nil
。如果它为零,则应在添加任何视图之前启动它。