Apple conseille d'utiliser le code suivant pour détecter s'il s'agit d'un iPad ou d'un iPhone / iPod Touch :
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// Le périphérique est un iPad fonctionnant sous iPhone 3.2 ou ultérieur.
// [par exemple, chargez le fichier nib iPad approprié]
}
else {
// Le périphérique est un iPhone ou iPod touch.
// [par exemple, chargez le fichier nib iPhone approprié]
}
Le problème est que UI_USER_INTERFACE_IDIOM() et UIUserInterfaceIdiomPad ne sont PAS définis dans les SDK antérieurs à 3.2. Cela semble totalement vain pour une telle fonction. Ils ne peuvent être compilés et exécutés que sur iPhone OS 3.2 (iPhone OS 3.2 ne peut être exécuté que sur iPad). Donc, si vous utilisez UI_USER_INTERFACE_IDIOM(), le résultat sera toujours d'indiquer un iPad.
Si vous incluez ce code et ciblez OS 3.1.3 (le système d'exploitation le plus récent d'iPhone/iPod Touch) afin de tester votre code d'application universelle pour iPhone, vous obtiendrez des erreurs de compilation car les symboles ne sont pas définis dans 3.1.3 ou antérieur, lors de la compilation pour l'émulateur iPhone 3.1.3.
Si c'est l'approche recommandée par Apple pour la détection des périphériques en temps réel, que fais-je de mal? Quelqu'un a-t-il réussi à utiliser cette approche pour la détection des périphériques?