以前的代码
[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
)。最初,我将上面的代码一个接一个地放在两条平行线上,然后我将第二条线放在第一个调用的完成块中。而这两种方法都无法按预期工作。是否有一些棘手的事情使它不能进入新的视图控制器?
此外,它曾经具有翻转到新内容的良好效果,但是现在,如果它有效,它可能会翻到第一页(起始页),然后翻到结果页面,然后,再次翻到起始页面。因为起始页面看起来与结果页面完全不同,所以我宁愿继续翻转显示结果页面(从一个结果页面翻转到另一个结果页面)。如果我将“dismiss”设置为没有动画,它将没有翻转动画,但它仍将首先显示起始页面,然后翻转到结果页面。有办法解决这个问题吗?
更新:解雇后self
不再存在是不是真的? (该对象是dealloc'ed)。上面的代码实际上是在一个类方法中完成的(该类是aNewViewController
的同一个类,它是结果页面的视图控制器)。为了解决self
问题,我尝试先设置一个局部变量
UIViewController *presentingViewController = foo.presentingController;
[presentingViewController dismissViewControllerAnimated:NO
completion:^{
[presentingViewController
presentViewController:aNewViewController
animated:YES completion:nil];
}];
(传入foo
,其值为self
)。那真的有效!但是,如果它不是类方法但是实例方法...会self
不再存在吗? (如果它是在一个实例方法中,完成块是否会使对象保持活动状态?但是在完成块之后,谁保持对象活着呢?)我在类方法中做到了,因为那时起始页只能调用它提供此页面的类方法(使用URL数据获取逻辑)。
答案 0 :(得分:0)
您需要在这两个转换之间添加一些延迟。尝试添加0.40的dealy。与[self performSelector:@selector(anySelector:) withObject:nil afterDelay:0.40];