di Apple consiglia utilizzando il seguente codice per rilevare se in esecuzione su un iPad o iPhone/iPod Touch:Come si arriva UI_USER_INTERFACE_IDIOM() per lavorare con iPhone OS SDK <3.2
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running iPhone 3.2 or later.
// [for example, load appropriate iPad nib file]
}
else {
// The device is an iPhone or iPod touch.
// [for example, load appropriate iPhone nib file]
}
Il problema è che UI_USER_INTERFACE_IDIOM () e UIUserInterfaceIdiomPad NON sono definiti negli SDK precedenti alla 3.2. Questo sembra vanificare completamente lo scopo di tale funzione. Possono essere compilati ed eseguiti solo su iPhone OS 3.2 (iPhone OS 3.2 può essere eseguito solo su iPad). Quindi se puoi utilizzare UI_USER_INTERFACE_IDIOM(), il risultato sarà sempre quello di indicare un iPad.
Se si include questo codice e il sistema operativo di destinazione 3.1.3 (il più recente sistema operativo iPhone/iPod Touch) per testare il proprio codice universale associato a iPhone, si otterranno errori del compilatore poiché i simboli non sono definiti in 3.1 .3 o precedenti, durante la compilazione per il simulatore iPhone 3.1.3.
Se questo è l'approccio consigliato da Apple per il rilevamento del dispositivo di runtime, cosa sto facendo male? Qualcuno è riuscito a utilizzare questo approccio per il rilevamento dei dispositivi?
Questo è se si desidera compilare per 3.0. Dovresti, come detto drootang, compilare per 3.2 ed eseguirlo su un dispositivo 3.0, poiché 3.2 è ciò che stai inviando all'App Store. – conradev
Sono d'accordo, ma non c'è modo di provare in iPHONE Simulator (al contrario di iPad) mentre lo sviluppo per 3.2. Se vuoi provare su entrambi i sim, devi fare questo tipo di trucco. –