0

テーブルビューであるナビゲーションビューコントローラーがあり、テーブルビューから行を選択すると詳細ビューページに移動します。詳細ビュー ページに移動すると、サーバーからいくつかの情報を取得し、サーバーが応答しない場合、親ナビゲーション ビューの前に表示される警告ビュー ポップアップが表示されます。アラートビューで[OK]を押して別の行をクリックすると、「didselectview」メソッドには移動しますが、詳細ビューページには移動しません。誰かが理由を知っていますか?以下のコード。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Navigation logic may go here. Create and push another view controller.
Item *selectedItem = (Item *)[self.fetchedObjectsArray objectAtIndex:indexPath.row];
NSString * urlString = [CONST_FEED_DISCRIPTION_URL stringByAppendingString:selectedItem.guid];
NSDate * dateString = selectedItem.date;
JsonViewController *jsonViewController = [[JsonViewController alloc] initWithURLString:urlString date:dateString];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                                               style:UIBarButtonItemStyleBordered
                                                              target:nil
                                                              action:nil];
self.navigationItem.backBarButtonItem = backButton;
self.navigationController.navigationBar.tintColor = [UIColor colorWithHexString:CONST_NAVIGATIONBAR_COLOR];
[self.navigationController pushViewController:jsonViewController animated:YES];
[backButton release];
[jsonViewController release];
}

初めてアラート ビューが表示されます (これはエラー メッセージです)。その後、行をクリックしても何も起こりません。しかし、私はそれが以下の方法に入ることを知っています。誰かが理由を知っていますか?ビューをプッシュすることと関係がありますか?それらをポップしませんか?

4

1 に答える 1

1

tableView が返されるように、次の runLoop までプッシュを延期します。

dispatch_async(dispatch_get_main_queue(), ^ {
    NSLog(@"Going to push...");
    NSLog(@"...view Controller %@", jsonViewController);
    [self.navigationController pushViewController:jsonViewController animated:YES];
    [jsonViewController release];
    NSLog(@"Just pushed %@", jsonViewController);
) );

明確にするために、既存のコードから次の両方の行を削除します。

[self.navigationController pushViewController:jsonViewController animated:YES];
[jsonViewController release];
于 2012-08-21T15:48:24.783 に答える