我有一个导航视图控制器,它是一个表视图,然后从表视图中,如果我选择一行,它将进入详细视图页面。当我进入详细视图页面时,我从服务器检索一些信息,如果服务器没有响应,那么我会弹出一个警报视图,该视图出现在我的父导航视图前面。现在当在警报视图上按下确定并单击另一行时它会进入我的“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];
}
第一次出现警报视图(这是一条错误消息)。之后,当你点击一行时没有任何反应。但我知道它进入下面给出的方法。谁会知道为什么?这与推动观点有什么关系吗?而不是弹出他们?
答案 0 :(得分: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];