0

我有一个导航视图控制器,它是一个表格视图,然后如果我选择一行,它会从表格视图进入详细视图页面。当我转到详细视图页面时,我从服务器检索一些信息,如果服务器没有响应,那么我会弹出一个警报视图,该视图出现在我的父导航视图前面。现在,当在警报视图上按确定并单击另一行时,它确实进入了我的“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

将推送推迟到下一个 runLoop,让 tableView 返回:

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 回答