Xcode: obtención de la advertencia “conversión implícita del tipo de enumeración UIDeviceOrientation”

Advertencia completa:

Implicit conversion from enumeration type 'UIInterfaceOrientation' to different enumeration type 'UIDeviceOrientation' 

Poniéndolo en juego:

 [self orientationChanged:interfaceOrientation]; 

Este es el método:

 - (void)orientationChanged:(UIInterfaceOrientation)interfaceOrientation 

Realmente no puedo entender de dónde viene esta advertencia.

UIDeviceOrientation refiere a la orientación física del dispositivo, mientras que UIInterfaceOrientation hace referencia a la orientación de la interfaz de usuario. Cuando llamas a tu método

 [self orientationChanged:interfaceOrientation]; 

lo más probable es que le esté pasando una UIDeviceOrientation cuando, de acuerdo con el método, utilice UIInterfaceOrientation .

Solo para ampliar un poco este punto, UIDeviceOrientation es una propiedad de la clase UIDevice , y existen estos valores posibles:

UIDeviceOrientationUnknown – No se puede determinar

UIDeviceOrientationPortrait – Botón de inicio hacia abajo

UIDeviceOrientationPortraitUpsideDown – Botón de inicio hacia arriba

UIDeviceOrientationLandscapeLeft : botón de inicio hacia la derecha

UIDeviceOrientationLandscapeRight – Botón de inicio hacia la izquierda

UIDeviceOrientationFaceUp : el dispositivo es plano, con la pantalla hacia arriba

UIDeviceOrientationFaceDown – El dispositivo es plano, con la pantalla hacia abajo

En cuanto a UIInterfaceOrientation , es propiedad de UIApplication y solo contiene 4 posibilidades que corresponden a la orientación de la barra de estado:

 UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight, UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft 

Para obtener UIDeviceOrientation , usa

 [[UIDevice currentDevice] orientation] 

y para obtener UIInterfaceOrientation , usa

 [[UIApplication sharedApplication] statusBarOrientation]