2012-06-07 53 views
0

我有一個模式視圖,需要用戶在繼續之前驗證他/她的電子郵件。這種模式視圖可以從應用程序中的兩個不同位置呈現。在一個地方它來自另一種模態觀點。這是我的代碼,立即解散兩種模態視圖(很好用)。無法使if/else語句正常工作

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不是類型轉換,但如果我轉換爲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

最底層代碼發生在MyLoginViewController代碼正確的地方嗎? – Christian

+0

我一直試圖插入像'if([self.presentingViewController isMemberOfClass:[MyLoginViewController class]]){}'到完成​​塊。所以它看起來像:'[self dismissViewControllerAnimated:YES completion:^ {if([self.presentingViewController isMemberOfClass:[MyLoginViewController class]]){MyLoginViewController * controller =(MyLoginViewController *)self.presentingViewController; [controller verifiedEmail]; }' –

+0

你可以在崩潰時顯示你遇到的錯誤嗎?這可能會有所幫助。 –

回答

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

而且它現在工作奇妙。感謝您讓我指出 正確的方向!

0

你試過

isKindOfClass:[MyLoginViewController類]

0

您的代碼應該是這樣的,而不是使用isMemberOfClass:嘗試isKindOfClass:

[self dismissViewControllerAnimated:YES completion:^{ 

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

    } 

}]; 
+0

我想我只是想通了。顯然,稱自己。在完成塊中呈現ViewController'是不好的,因爲解除是「完成的」,現在'self.presentingViewController是'null'。我有一個想法來解決它,並會很快更新。 –