Warunkowa obsługa funkcji iOS 6 w aplikacji iOS 5

Jak można obsługiwać funkcje iOS6 w aplikacji z Minimal Deployment Target ustawionym na iOS 5.0?

Na przykład, jeśli użytkownik ma iOS 5, zobaczy jeden UIActionSheet, jeśli użytkownik ma iOS 6, zobaczy Inny UIActionSheet dla iOS 6? Jak ty to robisz? Mam Xcode 4.5 i chcę aplikację działającą na iOS 5.

Author: Sergey Grischyov, 2012-09-25

1 answers

Zawsze powinieneś preferować wykrywanie dostępnych metod / funkcji, a NIE wersji systemu iOS, a następnie zakładać, że metoda jest dostępna.

Patrzdokumentacja Apple .

Na przykład w iOS 5, aby wyświetlić kontroler widoku modalnego, zrobimy coś takiego:

[self presentModalViewController:viewController animated:YES];

W iOS 6, metoda presentModalViewController:animated: UIViewController jest przestarzała, powinieneś użyć presentViewController:animated:completion: w iOS 6, ale skąd wiesz, kiedy używać czego?

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

Prawidłowy sposób radzenia sobie z tym to:

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

Można nawet argumentować, że należy być bardziej surowym i zrobić coś w stylu:

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 !");

Nie jestem pewien twojego przykładu UIActionSheet, o ile wiem, to samo jest na iOS 5 i 6. Może myślisz o UIActivityViewController do udostępniania i może chciałbyś wrócić do UIActionSheet, jeśli jesteś na iOS 5, więc możesz sprawdzić, czy klasa jest dostępna, zobacz tutaj Jak to zrobić.

 19
Author: Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-04 04:08:28