我有一个模式视图,要求用户在继续之前验证他/她的电子邮件。此模式视图可以从应用程序中的两个不同位置呈现。在一个地方,它来自另一个模态视图。这是我一次关闭两个模态视图的代码(效果很好)。
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);
}
}];
它现在运行良好。感谢您让我指出正确的方向!