2011-04-27 35 views
3

我有一个视图控制器项目列表推两个层次。我可以选择一个项目并推送详细视图控制器以显示所选项目的详细信息。然后,我可以选择编辑按钮(从导航栏中),然后按下编辑视图控制器,以便编辑该项目的详细信息。所有这些都在工作,包括取消和撤消。困难pushViewController一次

在第一个列表视图控制器,我也有一个附加按钮(在导航栏),其中I可以添加新的记录。 (这是使用核心数据,但我认为这与我的问题没有关系。)我开始通过为项目创建空白记录进行测试,并且当详细视图控制器出现时,所有字段都是空白的。然后,我可以选择编辑按钮并编辑细节,就好像它是已经填充的记录一样。这也适用。

我一直在努力做的就是选择Add按钮,并立即推详细视图控制器,然后编辑视图控制器。我想这样做的原因是,当我弹出编辑视图控制器时,将显示详细视图控制器。 (然后,我可以弹回到列表视图控制器或再次推入编辑视图控制器)。我有这个麻烦

我试图在列表视图控制器两次按动,就像这样:

- (void) add { 
    clientInfoTVC.clientMO = [self createNewClient]; 
    [self.navigationController pushViewController:clientInfoTVC animated:YES]; 
    [self.navigationController pushViewController:clientInfoTVC.clientEditTVC animated:YES]; 
} 

其中clientInfoTVC.clientEditTVC指向eidt视图控制器。当我尝试添加时,此错误SIGABRT并暂停。

我然后尝试设置在详细视图控制器的标志属性值被选择时添加,所述第一前推,然后做在viewWillAppear中的第二推详细视图控制器。这个错误出来了。我试着将第二次推动到详细视图控制器的viewDidAppear,结果相同。

我迷失在这一个。有人可以给我一些想法如何通过一个视图控制器推到第二个,这样我可以维护导航堆栈并弹出回到中间视图控制器?


@ljkyser击中部分答案。但是我也发现,仅仅将视图推送到堆栈上并不会执行它的init,viewWillAppear和viewDidLoad。我猜测,因为所有这些都发生在主线程上,所以推视图只是将视图控制器排队到运行循环上。推入第二个视图控制器会将第一个视图控制器从运行循环中删除,并将第二个视图控制器放入运行循环队列中。也许有人可以比我刚刚做的更准确地描述它。

在任何情况下,为了让编辑视图控制器正确初始化,我必须传递一个指针,以便它可以找到它正在处理的托管对象。我最初实例化了详细视图控制器中的编辑视图控制器。因此,在我的原始代码中,我推送了一个尚未实例化的视图控制器。为了安全起见,我实例化,它从列表视图控制器,然后确保所有的管理对象的指针分别设立前,我做了双重推动,像这样:

- (void) add {  
    Client *clientNew = [[NSEntityDescription alloc] init]; 
    clientNew = [self createNewClient]; 
    clientInfoTVC.clientMO = clientNew; 
    clientEditTVC.clientMO = clientNew; 
    [clientNew release]; 
    [self.navigationController pushViewController:clientInfoTVC animated:NO]; 
    [self.navigationController pushViewController:clientEditTVC animated:YES]; 
} 

确认答案由@ljkyser给出,我在保持第一个动画的同时尝试了这些更改:YES。有了这个,导航栏看起来不错,但其余的视图不同步。设置动画:没有解决这个问题。

回答

4

试着改变你的代码如下:

- (void) add { 
    clientInfoTVC.clientMO = [self createNewClient]; 
    [self.navigationController pushViewController:clientInfoTVC animated:NO]; 
    [self.navigationController pushViewController:clientInfoTVC.clientEditTVC animated:YES]; 
} 

第一pushViewController动画参数设置为NO。

到这太问题类似:Problem pushing multiple view controllers onto navigation controller stack

还有其他的选择也是如此。如果需要(UINavigationController reference),您可以推送并弹出特定的视图控制器,或直接编辑UINavigationController堆栈(see here)。

+0

谢谢。你的答案是有帮助的。但是我也发现了另一个问题,我在上面的编辑中提供了细节(在该行的下面)。 – Jim 2011-04-27 13:14:17