ios - 尝试在 iOS 中添加 subview 时出现 "Array out of bounds"错误

标签 ios objective-c

我目前正在编写一个应用程序,但我遇到了一个问题,该问题似乎是由我未编写的代码(即 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/

相关文章:

javascript - 在 iOS Safari 上离开页面之前如何要求用户确认?

objective-c - 如何检测由于没有连接而调用 didFailWithError ?

ios - 向 UISearchBar 添加动态类型

iOS7选择按钮边框效果

objective-c - iPhone 模拟器比设备慢

ios - UITableView 部分页脚在插入新表格行后移动

ios - For循环不改变变量

ios - 移动叠加层 Google map iOS SDK

objective-c - 输出高频信号耳机

iphone - 使用 sizeWithFont 始终获得相同的高度 :minFontSize:actualFontSize:forWidth:lineBreakMode: