Objective c 什么';UINavigationController和PoptoViewController上的后退按钮有什么区别?

Objective c 什么';UINavigationController和PoptoViewController上的后退按钮有什么区别?,objective-c,uitableview,uinavigationcontroller,Objective C,Uitableview,Uinavigationcontroller,我有一个UINavigationController层次结构,VC1-->VC2 VC1有一个表视图,当VC2完成其工作时,我需要重新加载它,因此VC1有以下代码: -(void)viewWillAppear:(BOOL)animated { [[self tableView] reloadData]; } VC2实质上是与服务器一起在VC1中创建一个新的表行。当按下VC2中的“完成”按钮时,我调用[navController PopViewController激活:是]。下面是从用户

我有一个
UINavigationController
层次结构,VC1-->VC2

VC1有一个表视图,当VC2完成其工作时,我需要重新加载它,因此VC1有以下代码:

-(void)viewWillAppear:(BOOL)animated
{
    [[self tableView] reloadData];
}
VC2实质上是与服务器一起在VC1中创建一个新的表行。当按下VC2中的“完成”按钮时,我调用
[navController PopViewController激活:是]
。下面是从用户的角度来看所发生的事情:

  • 访问VC2,使用它为VC1中的表创建新行。按完成

  • 层次结构成功地导航回VC1,但
    tableview
    不会重新加载并显示新行

  • 但是,如果我随后导航到VC2,并立即点击
    navController
    back按钮,则表格会重新加载并显示新行

  • 那么为什么
    [tableview reload]
    可以在3上工作而不能在2上工作呢?非常感谢

    ==

    更多代码响应:

    应用程序内代理:

        CWLandingVC *lvc = [[CWLandingVC alloc] init];
        UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:lvc];
        [[self window] setRootViewController:navController];
    
    在VC0中:

    -(void)toSessionMgmtViewController
    {
        TSessionMgmtViewController *tsmvc = [[TSessionMgmtViewController alloc] init];
        [[self navigationController] pushViewController:tsmvc animated:YES];
    }
    
    在VC1中:

    - (IBAction)toCreateSessionView:(id)sender
    {
        TCreateSession *cs = [[TCreateSession alloc] init];
        [[self navigationController] pushViewController:cs animated:YES];
    }
    
    -(void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        [[self tableView] reloadData];
    }
    
    在VC2中: 完成与服务器的工作

        UINavigationController *navControler = [self navigationController];
        [navControler popViewControllerAnimated:YES];
    
    此外,当VC2完成与服务器的协作时,它会更新一个名为SessionListStore的会话数据存储:

     - (TSession *)addSession:(NSString *)code withName:(NSString *) name qs:(int)qs
     {
         TSession *s = [[TSession alloc] initWithName:name code:code numberQuestions:qs];
         [_sessions setObject:s forKey:code];
         return s;
     }
    
    其中sessions是SessionListStore中的NSNutatbleDictionary


    非常感谢。编辑:解决方案是从服务器调用的完成块触发重载数据调用。

    请检查这个答案

    是否已将导航控制器添加到视图控制器或将视图控制器添加到导航控制器

    此外,还可以将所需的视图控制器设置为导航控制器的代理,并实现此方法

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
    

    谢谢,尽管与上面提到的场景不同,我并没有将UIDABBarController嵌套在UINavigationController中。所以我相信我已经在做这个答案所暗示的事情了。没有调用ViewWillAppeal的任何其他原因?您是否在上述帖子中查看了此链接?好的,Thx,所以帖子说“…如果您添加一个UINavigationController作为UIViewController子类的子视图,那么您必须显式地调用它的viewwillbeen”。但在我的项目中,nav控制器不是另一个vc的子类(请参阅上面新添加的应用程序委派代码)。我还在误解什么吗?谢谢,在VC1的视图中添加一个断点将出现:并检查它是否被调用,我打赌是的。另外,您可以发布将数据添加到表视图的代码吗?啊,是的,您是正确的。我在ViewWillDisplay中添加了一个断点,并调用了它。但是VC1中的表格仍然没有显示新的单元格。然后,如果我执行-->VC2