0

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

[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 状态暂时保持的方法

任何帮助都会很好。

4

2 回答 2

2

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

当然,除非这为您提供了答案,否则您会在某处保留一些强烈的参考。

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

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

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

于 2013-03-03T15:08:58.050 回答
2

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

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

就像是

@property(nonatomic, strong)TaggingScreenViewController *realTaggingScreen;

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

self.realTaggingScreen = nil; 

if you don't need it to persist anymore then you can check if you need to allocate a new instance using

 if(self.realTaggingScreen) {
//initialize...
}
于 2013-03-03T15:11:31.793 回答