曾经有效的代码是
[self presentViewController:aNewViewController animated:YES completion:nil];
和self
是同一个类aNewViewController
,所以它是一个通过水平翻转不断呈现新页面(具有不同数据)的页面。
但由于presentViewController
这种方式会导致内存使用量越来越多(有点像网络浏览器,只有越来越多的 Back 和 Forward 历史记录),所以我将代码更改为:
[self.presentingViewController dismissViewControllerAnimated:NO
completion:^{
[self.presentingViewController
presentViewController:aNewViewController
animated:YES completion:nil];
}];
但由于某种原因,它只是“返回”到前一个视图控制器的视图,而没有进入新的视图(aNewViewController
)。最初,我将上面的代码一个接一个地放在 2 行平行的行中,然后将第二行放在第一次调用的完成块中。这两种方法都不会按预期工作。是否有一些棘手的问题使它无法进入新的视图控制器?
还有,以前翻到新内容的效果不错,但是现在,如果有效的话,大概会翻回第一页(起始页),然后再翻到结果页,下一次,再次翻到起始页。因为起始页面看起来与结果页面完全不同,我宁愿它只是继续翻转显示结果页面(从一个结果页面,翻转到另一个结果页面)。如果我将“关闭”设置为没有动画,它不会有翻转动画,但它仍然会先显示起始页面,然后再翻转到结果页面。有没有办法解决这个问题?
更新:self
解雇后不复存在 是不是真的?(对象已解除分配)。上面的代码实际上是在一个类方法中完成的(该类是同一个类aNewViewController
,即结果页的视图控制器)。为了解决这个self
问题,我尝试先设置一个局部变量
UIViewController *presentingViewController = foo.presentingController;
[presentingViewController dismissViewControllerAnimated:NO
completion:^{
[presentingViewController
presentViewController:aNewViewController
animated:YES completion:nil];
}];
(foo
被传入,并且具有self
) 的值。然后它真的有效!但是,如果它不是类方法而是实例方法……将self
不再存在怎么办?(如果是在实例方法中,完成块会让对象保持活动状态吗?但是在完成块之后,谁让对象保持活动状态呢?)我在类方法中做到了,因为这样起始页面就可以调用它呈现此页面的类方法(带有 URL 数据获取逻辑)。