0

続行する前に、ユーザーが自分の電子メールを確認するように要求するモーダル ビューがあります。このモーダル ビューは、アプリ内の 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);
  }
}];

そして今、それは素晴らしく機能しています。正しい方向に向けてくれてありがとう!

4

3 に答える 3

0

やってみました

isKindOfClass:[MyLoginViewControllerクラス]

于 2012-06-07T20:17:15.437 に答える
0

同様の問題を抱えている人は、@Mike_Z が解決策を見つけました。

その時点で null であるため、完了ブロック内で self.presentingViewController を呼び出すことはできません。コードを次のように変更しました。

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);
  }
}];

そして今、それは素晴らしく機能しています。正しい方向に向けてくれてありがとう!

于 2012-06-07T20:32:27.783 に答える
0

isMemberOfClass:tryを使用する代わりに、コードは次のようになります。isKindOfClass:

[self dismissViewControllerAnimated:YES completion:^{

if ([self.presentingViewController isKindOfClass:[MyLoginViewController class]]) {
MyLoginViewController *controller = (MyLoginViewController*)self.presentingViewController;    
[controller verifiedEmail];

   }

}];
于 2012-06-07T20:20:35.823 に答える