0

我有一个模式视图,要求用户在继续之前验证他/她的电子邮件。此模式视图可以从应用程序中的两个不同位置呈现。在一个地方,它来自另一个模态视图。这是我一次关闭两个模态视图的代码(效果很好)。

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

当我尝试添加检查以防它不是来自另一个模式视图时,问题就开始了。我尝试将此 if 语句插入到我的dismissViewControllerAnimated:complete:^块中:

* if ([self.presentingViewController respondsToSelector:@selector(verifiedEmail)]){}
if ([self.presentingViewController isMemberOfClass:[MyLoginViewController class]]){}
* if ([self.presentingViewController class] == [MyLoginViewController class]){}

这些都不起作用。它们要么失败(在 *'d 的情况下)要么使应用程序崩溃。我认为问题在于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

您的代码应如下所示,而不是使用isMemberOfClass:tryisKindOfClass:

[self dismissViewControllerAnimated:YES completion:^{

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

   }

}];
于 2012-06-07T20:20:35.823 回答
0

对于任何有类似问题的人@Mike_Z 找到了解决方案。

事实证明,您不能在完成块内调用 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 回答