0

我目前正在编写一个应用程序,我遇到的问题似乎是由我没有编写的代码(即 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]; }

作为记录,子视图数组不是零。

4

2 回答 2

2

检查您是否在某处设置了视图.hidden = YES;

我拉了一个多小时才发现我隐藏了寻呼机控件并尝试稍后设置pageIndicatorTintColor属性,这也会引发数组越界问题。

于 2014-02-24T15:45:51.700 回答
0

确保您没有在没有调用方法的情况下覆盖init/方法。initWithNibNameScheduleSelectorViewControllersuper

当然,您始终可以[self.view subviews]在控制台中打印父视图以了解子视图数组是否为nil. 如果它是 nil 你应该在添加任何视图之前启动它。

于 2013-11-11T13:47:23.287 回答