presentModalViewControllerメソッドを使用して提示されたUIViewControllerの階層があります。
提示されたすべてのViewControllerをアレイに取り込むシングルトンがあります。
たとえば、コントローラーA、B、Cの順に提示しました。各コントローラーをインデックス0に挿入しました。
だから私は以下のような階層を持っています
C
B
A
これは私のシングルトンです
@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に戻る方法の1つではないかもしれませんが、私の質問はいずれにせよ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は列挙中に変更されました
ですから、却下した後、私は自分のオブジェクトを失い、おそらくこれが私の問題だと思います。