如何保留我的View Controller

时间:2013-03-03 14:55:17

标签: ios objective-c uiviewcontroller state persist

当我离开View Contoller时,我使用:

[self dismissViewControllerAnimated:YES completion:nil];

这会“破坏”视图控制器及其状态吗?

我希望将视图控制器置于其所处的状态,使用按钮等滚动视图,然后在按下处理VC入口的父按钮时返回到它。我在父母中使用代码如下:

- (void)handleDoubleTap:(UITapGestureRecognizer *)doubleTap {

realTaggingScreen = [[TaggingScreenViewController alloc]init];
realTaggingScreen.topLeftCornerImage = self.imageToPresent;
realTaggingScreen.salescallDate = self.salescallDate;
realTaggingScreen.shopName = self.shopName;
realTaggingScreen.refToThumbnailsVC = self.presentingThumbnailViewController;
realTaggingScreen.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:realTaggingScreen animated:YES];

}

由于alloc init,我知道显然错误。

我试图给我的标记屏幕一个对父和一个名为iExist的BOOL的引用,以及给我的父母引用标记屏幕,然后如果BOOL为真,则打开对子的引用,否则为alloc init等但这不起作用。我不禁想到这不是正确的方法....

我还想在NSDocuments目录中保存某些对象,并在应用程序运行之间加载它们,但我知道如何做到这一点。现在我想找到一种方法让VC状态暂时保持

任何帮助都会很好。

2 个答案:

答案 0 :(得分:2)

如果您使用ARC,如果没有指针指向它,视图控制器将被释放。

我建议创建一个指向realTaggingScreen实例的强指针

类似

@property(nonatomic, strong)TaggingScreenViewController *realTaggingScreen;

如果我得到你想做的事,你就不需要BOOL iExist了。 你可以用

self.realTaggingScreen = nil; 

如果你不再需要它继续存在 然后你可以检查是否需要使用

分配一个新实例
 if(self.realTaggingScreen) {
//initialize...
}

答案 1 :(得分:1)

当您关闭视图控制器时,它将被释放。

除非当然,这为你提供了答案,你在某处保留了一些强有力的参考。

AppDelegate可能是保留引用或调用视图控制器的好位置。取决于你想如何处理它。如果你保留一个强大的参考供以后使用,那么请记住你下次只提供它但不再创建(alloc,init)它。

如果您保留参考并重复使用,请确保一次只显示一次。 例如。你不应该让你的应用程序(代表)出现控制器A,它出现控制器B,它会再次出现B的C。如果你想这样做那么你应该在C中创建一个B的第二个实例并呈现这个B2。

(您可以在其他地方再次显示一个视图,使其从旧位置移动到新位置,但您不应在视图层次结构中的视图控制器中执行此操作 - 无论您是否存在或推送它们。)