该作品曾经是在iOS上,为什么会忽略当前视图控制器紧跟的视图控制器不起作用?
[self presentViewController:aNewViewController animated:YES completion:nil];
和self
的代码是同一类aNewViewController
,所以它是在呈现一个新的页面(使用不同的数据),通过水平翻转保持一个页面。
但因为以这种方式presentViewController
可能导致内存使用率越来越多(有点像一个网页浏览器只是有更多的前进和后退更多的历史),所以我改变了代码:
[self.presentingViewController dismissViewControllerAnimated:NO
completion:^{
[self.presentingViewController
presentViewController:aNewViewController
animated:YES completion:nil];
}];
但由于某种原因,它只是“返回”到前一个视图控制器的视图,而不会转到新视图(aNewViewController
)。最初,我把上面的代码放在两条平行的行中,一个接一个,然后把第二行放在第一个调用的完成块中。而这两种方法都无法按预期工作。是否有一些棘手的问题让它不能进入新的视图控制器?
此外,它过去有翻转新内容的好效果,但现在,如果它起作用,它可能会翻回到第一页(起始页),然后翻到结果页面,然后再次翻到起始页面。由于起始页面与结果页面看起来有很大不同,我宁愿继续翻页显示结果页面(从一个结果页面翻到另一个结果页面)。如果我将“解散”设置为没有动画,它将不会有翻动画,但它仍然会首先显示起始页面,然后翻转到结果页面。有没有办法解决这个问题?
更新:self
在辞退后是否不复存在? (该对象被释放)。上面的代码实际上是在类方法中完成的(类是aNewViewController
的同一类,它是结果页的视图控制器)。为了解决这个问题self
,我试图设置一个局部变量第一
UIViewController *presentingViewController = foo.presentingController;
[presentingViewController dismissViewControllerAnimated:NO
completion:^{
[presentingViewController
presentViewController:aNewViewController
animated:YES completion:nil];
}];
(foo
传入,并有self
值)。那么它确实有效!但是如果它不是一个类方法但是一个实例方法会怎么样?self
不会再存在吗? (如果它是在一个实例方法中,完成块是否保持对象存活?但是在完成块之后,谁让对象保持活动?)我在类方法中做了它,因为然后起始页可以调用这个类方法来呈现此页面(使用URL数据获取逻辑)。
我很惊讶,这不会工作,因为你正在使用完成块。这在过去略有不同的情况下适用于我。 – Till
哦,顺便说一下,解雇完成后,“自我”不再存在了吗?我实际上是在类方法中做这件事,并将'self'传递给这个类方法... –