続行する前に、ユーザーが自分の電子メールを確認するように要求するモーダル ビューがあります。このモーダル ビューは、アプリ内の 2 つの異なる場所から表示できます。ある場所では、別のモーダル ビューから取得されます。これは、両方のモーダル ビューを一度に閉じるための私のコードです (うまくいきます)。
MYUser *thisUser = [MyUser thisUser];
[thisUser refreshInBackgroundWithBlock:^(MyObject *thisUser, NSError *error) {
if (thisUser){
if ([[thisUser objectForKey:@"emailVerified"] intValue]) {
[self dismissViewControllerAnimated:YES completion:^{
MyLoginViewController *controller = (MyLoginViewController *)self.presentingViewController;
[controller verifiedEmail];
}
}];
} else {
NSLog(@"Not verified");
}
} else {
NSLog(@"%@", error);
}
}];
別のモーダルビューからのものではない場合にチェックを追加しようとすると、問題が発生します。dismissViewControllerAnimated:complete:^
この if ステートメントをブロックに挿入しようとしました:
* if ([self.presentingViewController respondsToSelector:@selector(verifiedEmail)]){}
if ([self.presentingViewController isMemberOfClass:[MyLoginViewController class]]){}
* if ([self.presentingViewController class] == [MyLoginViewController class]){}
これらのどれも機能しません。それらは (* の場合) 失敗するか、アプリをクラッシュさせます。self.presentingViewController
問題は型キャストではないためだと思いますが、 INSLog(@"%@", [self.presentingViewController class]);
とNSLog(@"%@", [MyLoginViewController class]);
の場合、出力は同じに見えます。
何か案は?ありがとう。
ソリューションで編集
self.presentingViewController
その時点にあるため、完了ブロック内で呼び出すことはできませんnull
。コードを次のように変更しました。
MYUser *thisUser = [MyUser thisUser];
id presentingVC = self.presentingViewController;
[thisUser refreshInBackgroundWithBlock:^(MyObject *thisUser, NSError *error) {
if (thisUser){
if ([[thisUser objectForKey:@"emailVerified"] intValue]) {
[self dismissViewControllerAnimated:YES completion:^{
if ([presentingVC isMemberOfClass:[MyLoginViewController class]]){
MyLoginViewController *controller = (MyLoginViewController *)presentingVC;
[controller verifiedEmail];
}
}];
} else {
NSLog(@"Not verified");
}
} else {
NSLog(@"%@", error);
}
}];
そして今、それは素晴らしく機能しています。正しい方向に向けてくれてありがとう!