0

再現できる問題があります。問題が何であるかはわかりますが、私の人生では、それを修正する方法がわかりません。まず、ビューの構造について説明します。

ウィンドウのルート ビュー コントローラーは 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 と関係があるのではないかと考えたので、それを取り除いたところ、まったく同じ動作が得られました...ここで何かが欠けているように感じて、多くの悲しみを引き起こしています...どんな提案でも大歓迎です。

4

1 に答える 1

0

これを機能させる方法を見つけました。「ハッキー」に感じますが、機能します:-)コードでタブバーのナビゲーションイベントをシミュレートする必要がありました。上記のハンドラー メソッドで SO、誕生日 == 1 という条件で、self.TabBarController.selectedIndex = 1; を追加しました。次に、cellForItemAtIndexPath メソッドで、セルを返す直前に、self.tabBarController.selectedIndex = 0; を挿入しました。根本的な原因、つまり uicollectionview tabb ar との間で正確に何を切り替えるかを知りたいのですが.....

于 2013-10-07T13:39:28.337 に答える