Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone XCode:insertSubview、removeFromSuperview、viewDidLoad。。。把这一切都集中起来_Iphone_Objective C_Xcode - Fatal编程技术网

Iphone XCode:insertSubview、removeFromSuperview、viewDidLoad。。。把这一切都集中起来

Iphone XCode:insertSubview、removeFromSuperview、viewDidLoad。。。把这一切都集中起来,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我觉得我在这里遗漏了一些基本的东西,如果你能帮我把这些都整理好,我将不胜感激 假设我有两个视图控制器。。。ViewA控制器和ViewB控制器 如果我想展示viewA,我会这样做: ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil]; self.viewAController = new_view; [self.view insertSubView:n

我觉得我在这里遗漏了一些基本的东西,如果你能帮我把这些都整理好,我将不胜感激

假设我有两个视图控制器。。。ViewA控制器和ViewB控制器

如果我想展示viewA,我会这样做:

ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil];
self.viewAController = new_view;
[self.view insertSubView:new_view.view atIndex:0];
[new_view release];
[self.viewAController.view removeFromSuperview];
    ViewBController *new_view = [[ViewBController alloc] initWithNibName:@"ViewBController" bundle:nil];
    self.viewBController = new_view;
    [self.view insertSubView:new_view.view atIndex:0];
[new_view release];
如果在显示viewA后,我想显示viewB控制器,我会这样做:

ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil];
self.viewAController = new_view;
[self.view insertSubView:new_view.view atIndex:0];
[new_view release];
[self.viewAController.view removeFromSuperview];
    ViewBController *new_view = [[ViewBController alloc] initWithNibName:@"ViewBController" bundle:nil];
    self.viewBController = new_view;
    [self.view insertSubView:new_view.view atIndex:0];
[new_view release];
这是我的问题

当我第一次加载viewA时,viewA的“viewDidLoad”函数将启动。。。显然这是第一次加载。但是,当我从superview中删除viewA时,请在viewB中加载,然后在稍后再次加载viewA,如下所示:

[self.viewBController.view removeFromSuperview];
if ( self.viewAController == nil ) {

  ViewAController *new_view = [[ViewAController alloc] initWithNibName:@"ViewAController" bundle:nil];
  self.viewAController = new_view;
  [self.view insertSubview:new_view.view atIndex:0];
  [new_view release];

 } else {

  [self.view insertSubview:self.viewAController.view atIndex:0];

 }
viewA的“viewDidLoad”功能不会触发。这就好像viewA已经从视图中删除,但它的状态有点保存在内存中。当我再次加载viewA时,它只是从它停止的地方开始恢复。我真正需要它做的是加载,就像它是第一次加载一样,使用“viewDidLoad”,等等


我希望我已经正确地解释了这一点。如果有人能提供一些启示,我将不胜感激。

如果你不将
self.viewAController
设置为零,它就不会消失。您可能(希望)将其保留在您的
self.viewAController
属性中

您可以在加载视图B后释放它(如果您在其他地方不需要它)


如果调试If/else代码,您可能会发现“If”块从未被访问过。

起初我也有同样的想法。我试过:self.viewAController=nil;但应用程序崩溃了。我最终发现您需要这样做:self.viewAController.view=nil;