【发布时间】:2012-09-26 10:58:38
【问题描述】:
以前可以工作的代码是
[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 数据获取逻辑)。
【问题讨论】:
-
我很惊讶这不起作用,因为您正在使用完成块。过去,这对我有用,但情况略有不同。
-
哦,顺便说一句,当解雇完成后,
self不是真的不复存在了吗?我实际上是在类方法中执行此操作,并将self传递给此类方法...
标签: ios uiviewcontroller uikit