Advertencia molesta: constante de número integer no en el range de tipo enumerado 'UIViewAnimationOptions'

Al escribir código como el siguiente en XCode 5 utilizando el clang establecido en C11 / C ++ 11:

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^{ self.imgCheckIn.backgroundColor = [UIColor networkingColor]; } completion:nil]; 

El campo de options genera la siguiente advertencia:

 integer constant not in range of enumerated type 'UIViewAnimationOptions' (aka 'enum UIViewAnimationOptions') [-Wassign-enum] 

El problema parece ser que el método toma un tipo UIViewAnimationOptions , que es solo una enumeración de NSUInteger . Sin embargo, OR 'en los valores juntos crea un valor que no está explícitamente en la enumeración, por lo que se queja.

En general, esta parece ser una buena advertencia para tener, así que me gustaría quedármela. ¿Estoy haciendo algo mal?

No estás haciendo nada malo Como ya notó, el comstackdor se queja porque el valor no es ninguno de los valores definidos en la enumeración. (La bandera del comstackdor -Weverything implica esta verificación.)

Puede suprimir la advertencia mediante un reparto explícito:

 options:(UIViewAnimationOptions)(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat) 

o con un #pragma :

 #pragma clang diagnostic push #pragma clang diagnostic ignonetworking "-Wassign-enum" [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat animations:^{ self.imgCheckIn.backgroundColor = [UIColor networkingColor]; } completion:nil]; #pragma clang diagnostic pop