之前有效的代码如下:
[self presentViewController:aNewViewController animated:YES completion:nil];
而且,self
和 aNewViewController
是同一个类,因此它是一个不停呈现新页面(使用不同数据)的页面,通过水平翻转来实现。
但是,由于以这种方式使用presentViewController
会导致内存使用越来越多(有点像Web浏览器只有越来越多的“后退”和“前进”的历史记录),所以我将代码更改为:
[self.presentingViewController dismissViewControllerAnimated:NO
completion:^{
[self.presentingViewController
presentViewController:aNewViewController
animated:YES completion:nil];
}];
但出现了问题,它只会“返回”到之前的视图控制器视图,而不去到新的视图控制器(
aNewViewController
)。 最初,我将上述代码放在2个平行的线路中,其中一个跟着另一个,然后我将第二行放在第一个调用的完成块中。这两种方法都不能按预期工作。是否有什么棘手的事情使它不能转到新的视图控制器?另外,它曾经有将内容翻转到新页面的好效果,但是现在,如果它工作,它可能会翻转回第一页(起始页),然后翻转到结果页,下一次,再次翻转到起始页。因为起始页与结果页看起来非常不同,我更希望它继续翻转显示结果页(从一个结果页翻转到另一个结果页)。如果我将“关闭”设置为没有动画,它将没有翻转动画,但它仍然会先显示起始页,然后翻转到结果页。有没有办法解决这个问题?
更新:难道不是
self
在退出后就不复存在了吗? (对象已dealloc'ed)。 上述代码实际上是在一个类方法中完成的(该类是aNewViewController
的相同类,即结果页的视图控制器)。 为了解决self
问题,我首先尝试设置一个本地变量。UIViewController *presentingViewController = foo.presentingController;
[presentingViewController dismissViewControllerAnimated:NO
completion:^{
[presentingViewController
presentViewController:aNewViewController
animated:YES completion:nil];
}];
(
foo
被传递进来,它的值为self
)。如果它是一个类方法,那么它实际上是可以工作的!但如果它不是一个类方法而是一个实例方法...那么self
就不存在了吗?(如果它在一个实例方法中,那么完成块会保持对象的生命力吗?但是在完成块之后,谁会保持对象的生命力?)我这样做是因为在一个类方法中,页面可以直接调用此类方法来呈现此页面(带有URL数据获取逻辑)。
self
就不存在了,对吧?我实际上是在一个类方法中执行这个操作,并将self
传递给这个类方法... - nonopolarity