无法使if / else语句起作用

时间:2012-06-07 20:08:59

标签: iphone objective-c ios ipad

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

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

这些都不起作用。它们要么失败(如果是*那些),要么崩溃应用程序。我认为问题是因为self.presentingViewController不是类型转换,但是如果我NSLog(@"%@", [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);
  }
}];

它现在工作得非常好。谢谢你让我指出了正确的方向!

3 个答案:

答案 0 :(得分:0)

你试过吗

isKindOfClass:[MyLoginViewController class]

答案 1 :(得分:0)

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

[self dismissViewControllerAnimated:YES completion:^{

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

   }

}];

答案 2 :(得分: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);
  }
}];
  

它现在工作得非常好。谢谢你让我指出   正确的方向!