2012-09-25 21 views
7

W jaki sposób można obsługiwać funkcje systemu iOS6 w aplikacji z zestawem Minimal Deployment Target ustawionym na iOS 5.0?Warunkowe wsparcie funkcji systemu iOS 6 w aplikacji iOS 5

Na przykład, jeśli użytkownik ma system iOS 5, zobaczy jeden z nich: UIActionSheet, jeśli użytkownik ma system iOS 6, zobaczy inny kod UIActionSheet dla systemu iOS 6? Jak Ty to robisz? Mam Xcode 4.5 i chcę, aby aplikacja działała na iOS 5.

Odpowiedz

19

Powinieneś zawsze preferować wykrywanie dostępnych metod/funkcji zamiast wersji iOS, a następnie przy założeniu, że dostępna jest metoda.

Zobacz Apple documentation.

Na przykład w iOS 5, aby wyświetlić modalne kontroler widoku zrobilibyśmy coś takiego:

[self presentModalViewController:viewController animated:YES]; 

W iOS 6, sposób UIViewControllerpresentModalViewController:animated: jest przestarzała, należy użyć presentViewController:animated:completion: w iOS 6, ale skąd wiesz, kiedy użyć czego?

Możesz wykryć wersję iOS i mieć instrukcję if, jeśli chcesz użyć tego pierwszego lub drugiego, ale jest to delikatne, popełnisz błąd, może nowszy system operacyjny w przyszłości będzie miał nowy sposób na zrobienie tego .

Prawidłowy sposób obsłużyć to:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)]) 
    [self presentViewController:viewController animated:YES completion:^{/* done */}]; 
else 
    [self presentModalViewController:viewController animated:YES]; 

Można nawet twierdzić, że powinny być bardziej rygorystyczne i zrobić coś takiego:

if([self respondsToSelector:@selector(presentViewController:animated:completion:)]) 
    [self presentViewController:viewController animated:YES completion:^{/* done */}]; 
else if([self respondsToSelector:@selector(presentViewController:animated:)]) 
    [self presentModalViewController:viewController animated:YES]; 
else 
    NSLog(@"Oooops, what system is this !!! - should never see this !"); 

jestem pewien o swoim przykładzie UIActionSheet, O ile mi wiadomo, to samo dotyczy iOS 5 i 6. Być może myślisz o UIActivityViewController do udostępniania i możesz chcieć powrócić do UIActionSheet, jeśli używasz systemu iOS 5, więc możesz sprawdzić, czy klasa jest dostępne, patrz here jak to zrobić.

+1

Dzięki za pomoc! Niezwykle wspaniała odpowiedź! –

+0

Przyjemność i podziękowania za komplementy about.me – Daniel

+0

Możesz utworzyć łącze do frameworka w ustawieniach projektu, w takim przypadku, że ramka może nie być obecna we wszystkich wersjach, na przykład w twoim przypadku, wystarczy ustawić opcję jako opcjonalną. raczej wtedy wymagane. ---- pytanie zostało usunięte .... pytanie/komentarz. – Daniel