Je travaille sur une application universelle qui devrait être en mesure de fonctionner sur iPad et iPhone. Les docs iPad d'Apple disent utiliser UI_USER_INTERFACE_IDIOM()
pour vérifier si je suis en cours d'exécution sur iPad ou iPhone, mais notre iPhone est 3.1.2 et ne sont UI_USER_INTERFACE_IDIOM()
définis. En tant que tel, ce code casse:Vérifier si UI_USER_INTERFACE_IDIOM existe à l'exécution
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
Dans SDK Compatibility Guide d'Apple, ils suggèrent de faire ce qui suit pour vérifier si la fonction existe:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(UI_USER_INTERFACE_IDIOM() != NULL &&
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
Cela fonctionne, mais les résultats dans l'avertissement du compilateur: « Comparaison entre pointeur et entier. " Après avoir creusé autour je me suis dit que je peux faire disparaître le avec l'association suivante (void *)
avertissement du compilateur:
//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if((void *)UI_USER_INTERFACE_IDIOM() != NULL &&
UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES; //are we on an iPad?
} else {
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
}
Ma question est la suivante: Est-ce le dernier bloc de code ici pratique correct/acceptable/standard? Je ne pouvais pas trouver quelqu'un d'autre à faire quelque chose comme ça avec une recherche rapide qui me fait me demander si j'ai raté un getcha ou quelque chose de similaire.
Merci.
'UI_USER_INTERFACE_IDIOM' est une macro compilation. Il ne "existe" pas à l'exécution – user102008
Cela ne rend pas cette question digne de caution. –