私は現在アプリを書いていますが、私が書いていないコード (つまり、Apple のクラス) が原因と思われる問題が発生しています。UIViewController
私が書いたサブクラスのインスタンスを作成します。別のカスタム ビュー コントローラーの子ビュー コントローラーとして追加します。次に、この新しいView Controllerのビューを親View Controllerのビューのサブビューとして追加しようとすると、このエラーでクラッシュします。
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];
}
記録として、subviews 配列は nil ではありません。