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