Regla 1: No depende de la versión o el tipo de dispositivo para determinar si una característica está disponible. Los diferentes dispositivos (iPhone, iPod Touch y iPad) pueden obtener la misma característica pero en diferentes versiones del sistema operativo. El enlace débilmente contra los marcos y las clases faltantes será nil
. O use la función NSClassFromString()
que también devuelve nil
si una clase no existe. También use -[NSObject respondsToSelector:]
para consultar si existe un método o no.
Regla 2: Apple desalienta el uso de las constantes definidas (como __IPHONE_2_2
) en la comprobación de versiones, en lugar de utilizar sus valores numéricos como tal:
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 40200)
NSLog(@"BUILT against iPhone 4.2 or later");
#endif
Pero tomar nota usando #if
tiempo de compilación directiva solo comprobará qué versión del SDK tiene compilación contra y no la versión del sistema operativo más adelante ejecutará en.
Ambos 4.1 y 4.2 son ≥ 2.2. – kennytm
# if/# endif son * directivas * en tiempo de compilación *. Todo lo que hacen es compararlo con la configuración de compilación para ver a qué versión de sistema operativo se dirige. Pero se emitirá el mismo código independientemente del sistema operativo en el que se ejecute. Desea una verificación * en tiempo de ejecución *. – benzado
Pruebe este: http://jayprakashdubey.blogspot.in/2014/07/check-device-os-version.html –