2012-10-02 68 views
0

我有這樣的風俗後退按鈕:在iOS 6中回退到iOS棄用碼5

- (IBAction)backToMenu:(id)sender { 

[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

} 

測試我的應用程序在iOS 6中模擬器說dismissModalViewControllerAnimated已被棄用,我必須改用dismissViewControllerAnimated,所以,我怎麼可以使用iOS 6的代碼,並退回到iOS 5的

我已經試過這樣:

if([self respondsToSelector:@selector(presentingViewController:animated:completion:)]) 
    [self.presentingViewController dismissViewControllerAnimated:(YES) completion:nil]; 
else if([self respondsToSelector:@selector(presentingViewController:animated:)]) 
    [self.presentingViewController dismissModalViewControllerAnimated:YES]; 
else 
    NSLog(@"Oooops, what system is this ?!!! - should never see this !"); 

但是,如果沒有結果,我看到的NSLog並沒有意見被駁回,一個y提示?

預先感謝您。

回答

6

您正在測試的選擇器與您所調用的選擇器不同。請嘗試以下操作:

if([self.presentingViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) 
    [self.presentingViewController dismissViewControllerAnimated:(YES) completion:nil]; 
else if([self.presentingViewController respondsToSelector:@selector(dismissModalViewControllerAnimated:)]) 
    [self.presentingViewController dismissModalViewControllerAnimated:YES]; 
else 
    NSLog(@"Oooops, what system is this ?!!! - should never see this !"); 

最重要的區別是,我們在調用的對象 - self.presentingViewController,在這種情況下 - 從方法你該對象上調用不同。我們稱後者爲選擇器,這就是你想要放入@selector()包裝器中的位。

+0

有時,最好測試操作系統的版本並使用它來選擇路徑。不管你如何測試,你可以設置一個(相對)全局變量,所以你只測試一次,然後根據(tidy)全局標誌而不是(messy)'respondsToSelector'表達式來選擇哪條路徑。 –

+0

非常感謝Tim,非常好的解釋,它像一個魅力。這裏完成的 – roymckrank

5

使用[self dismissViewControllerAnimated:YES completion:Nil];對於iOS 6

+0

應該是NULL。是的,這是違反直覺的... –