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.
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ć.
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