0

私は現在アプリを書いていますが、私が書いていないコード (つまり、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 ではありません。

4

2 に答える 2