再現できる問題があります。問題が何であるかはわかりますが、私の人生では、それを修正する方法がわかりません。まず、ビューの構造について説明します。
ウィンドウのルート ビュー コントローラーは TabBarController です。TabBarController には、ルート ビュー コントローラーが UITableView として設定された NavigationController 1 (nav) と、ルート ビュー コントローラーが UICollectionView に設定された NavigationController 2 (nav2) の 2 つのビューが含まれます。AppDelegate でのすべての設定方法は次のとおりです。
WTATableView *tv = [[WTATableView alloc] initWithNibName:@"WTATableView" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:tv];
nav.tabBarItem.title = NSLocalizedString(@"Birthday List", nil);
nav.tabBarItem.image = [UIImage imageNamed:@"birthdaycake"];
WTACollectionViewController *cv = [[WTACollectionViewController alloc]
initWithCollectionViewLayout:[[UICollectionViewFlowLayout alloc] init]];
UINavigationController *nav2 = [[UINavigationController alloc]
initWithRootViewController:cv];
nav2.tabBarItem.title = NSLocalizedString(@"Birthday Grid", nil);
nav2.tabBarItem.image = [UIImage imageNamed:@"package"];
UITabBarController *tabController = [[UITabBarController alloc] init];
tabController.viewControllers = @[nav, nav2];
self.window.rootViewController = tabController;
[self.window makeKeyAndVisible];
return YES;
CollectionView は、エントリ ビュー コントローラーによってポストされた通知をサブスクライブし、通知の UserInfo ディクショナリに返されたデータを受け取り、データ ソース メソッドを呼び出して UICollectionview を更新します。そのコードは次のとおりです。
-(void)handleNotification:(NSNotification *)notification
{
[self.birthdays addObject:[notification userInfo]];
NSLog(@"Calling handle method");
if([self.birthdays count] == 1){
[self.collectionView reloadData];
}
if (self.birthdays.count > 1) {
NSLog(@" Number of itmes in section B: %d", [self.collectionView
numberOfItemsInSection:0]); [self.collectionView
insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem: (self.birthdays.count -1)
inSection:0]]];
}
}
そのため、ルート コントローラーが UITableView として設定された nav を含む最初のタブ バー項目で、NavBarButton をタップしてモーダル ビュー コントローラーを表示し、ユーザー エントリを取得してから、モーダル コントローラーを閉じて UITableView に戻ると、新しいテーブル エントリ。次に、UICollectionView としてルート コントローラーを持つ nav2 を含むタブ バー項目をタップしてから、UITable タブ バー項目に戻ると、必要な数のエントリを追加し続けることができます。問題はありません。しかし、uicollectionview を含むタブ バー項目に移動せず、uitableview から 2 番目のエントリを追加しようとすると、毎回クラッシュし、セクション内の項目の数が無効です」.
uicontroller タブに移動しないと、uicontroller のデータ ソース メソッドが呼び出されないことがわかります。タブバーに移動するまでUICollectionViewが初期化されていないようですが、initメソッドをNSLog outし、アプリの最初の起動時にビューがメソッドをロードしたためです。これは、nav2 コントローラーにラップされている uicollectionview と関係があるのではないかと考えたので、それを取り除いたところ、まったく同じ動作が得られました...ここで何かが欠けているように感じて、多くの悲しみを引き起こしています...どんな提案でも大歓迎です。