我有使用 presentModalViewController 方法呈现的 UIViewControllers 层次结构。
我有将所有呈现的视图控制器抓取到一个数组的单例。
例如,我展示了控制器 A,然后是 B,然后是 C。我将每个控制器插入到索引 0。
所以我的层次结构如下
C
乙
一个
这是我的单身
@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
CI 调用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 在枚举时发生了变异
所以我认为解雇后我失去了我的对象,也许这是我的问题。