【发布时间】:2013-03-27 09:39:16
【问题描述】:
我有使用 presentModalViewController 方法呈现的 UIViewController 层次结构。
我有一个单例,可以将所有呈现的视图控制器抓取到一个数组中。
例如,我展示了控制器 A,然后是 B,然后是 C。我将每个控制器插入到索引 0。
所以我的层次结构如下
C
B
一个
这是我的单身
@implementation PresentHelper
- (id)init
{
self = [super init];
if (self) {
self.viewControllers = [NSMutableArray new];
}
return self;
}
+ (PresentHelper *)sharedInstance
{
static dispatch_once_t pred;
static PresentHelper *sharedInstance = nil;
dispatch_once(&pred, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
- (void)backToViewControllerA
{
for (UIViewController *controller in self.viewControllers) {
[controller dismissModalViewControllerAnimated:NO];
}
[self.viewControllers removeAllObjects];
}
@end
在UIViewController C 中我调用backToViewControllerA 方法。
所以当我调试这个方法时,我想知道为什么- viewDidLoad 方法(对于 self.viewControllers 中的每个控制器)在这一行之后调用[controller dismissModalViewControllerAnimated:NO];,因为我认为它不应该像这样工作,但它可以工作。
所以,也许这不是返回视图控制器 A 的一种方法,但无论如何我的问题都与 viewDidLoad 方法有关。
这也是我如何展示每个控制器的代码。我有基类,每个(A、B、C 控制器都继承自它)。
- (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
{
PresentHelper *presentHelper = [PresentHelper sharedInstance];
[presentHelper.viewControllers insertObject:modalViewController atIndex:0];
[super presentModalViewController:modalViewController animated:animated];
}
也收到了这条消息
NSArray 在枚举时发生了变异
所以我认为解雇后我失去了我的对象,也许这是我的问题。
【问题讨论】:
-
那么...您是对 viewDidLoad 行为有疑问,还是在问从 C 到 A 的最佳方式是什么?单例的全部原因是否只是为了方便从 C 导航回 A?解决方案是否需要兼容iOS4.3?
-
问题是关于最好的方法。我发现了奇怪的行为,这与我的数组发生了变异,并且我认为未连接到 viewDidLoad。谢谢
-
需要在iOS4.3上运行吗?这是关于可能的解决方案的一个重要区别。
-
是的,它必须适用于 4.3 版本
标签: ios uiviewcontroller presentmodalviewcontroller