我目前正在编写一个应用程序,但我遇到了一个问题,该问题似乎是由我未编写的代码(即 Apple 的类)引起的。我创建了一个我编写的 UIViewController
子类的实例。我将它添加为另一个自定义 View Controller 的 subview Controller 。然后,当我尝试将这个新 View Controller 的 View 添加为父 View Controller View 的 subview 时,我遇到了崩溃并出现此错误。
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
我已经测试并确定问题是由尝试将 View 添加为 subview 引起的。我在 NSLog
中引用 View 只是为了确保导致错误的不仅仅是引用它的行为。我已经尝试将 View 添加为不同 View 的 subview 并且也崩溃了,所以问题不在于父 View 。最后,我尝试将不同的 View 作为 subview 添加到父 View 并且确实有效,进一步证明父 View 很好,而预期的 subview 有问题。我分配它的代码是这样的:
ScheduleSelectorViewController* selector = [[ScheduleSelectorViewController alloc] initWithNibName:@"ScheduleSelectorViewController" bundle:nil];
这一直对我有用。我不知道我改变了什么。我不太了解 subview 层次结构的内部工作原理,无法知道哪个数组是空的并且导致了这次崩溃,所以如果有人能帮助我,我将非常感激。
如果我可以提供任何其他有助于让我知道的信息。
更新:
这是崩溃的代码。我放置了 NSLogs 以指示它中断的行。
- (void) addViewControllerToStack:(UIViewController *)controller withKey:(NSString *)key
{<p></p>
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];
}
郑重声明,subviews 数组不是 nil。
最佳答案
检查你是否在某处设置了view's.hidden = YES;
我纠结了一个多小时才发现我隐藏了寻呼机控件并尝试稍后设置 pageIndicatorTintColor
属性,这也引发了数组越界问题。
关于ios - 尝试在 iOS 中添加 subview 时出现 "Array out of bounds"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899671/