ios - for - El método CGBitMapContextCreate provoca la advertencia del compilador Xcode 5 no Xcode 4
xcode descargar (2)
Acabo de actualizar Xcode de la versión 4.6.2 a 5.0, y después de hacer un método en mi proyecto (creado en Xcode 4.6.2), de repente aparece una advertencia del compilador. He intentado volver a abrir el proyecto tanto en la versión anterior como en la nueva de Xcode, y he confirmado que el mismo método no proporciona advertencias en 4.6.2.
Aquí está la línea de código que provoca la advertencia en Xcode 5.0:
CGContextRef context = CGBitmapContextCreate(NULL, frame.size.width * scaleFactor, frame.size.height * scaleFactor, 8, frame.size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst);
Y la advertencia dice:
"Implicit conversion from enumeration type ''enum CGImageAlphaInfo'' to different enumeration type ''CGBitMapInfo'' (aka ''enum CGBitMapInfo'')"
No parece ser una advertencia de desaprobación, pero no estoy lo suficientemente familiarizado con estas clases para interpretar el significado o saber cómo resolverlo. Cualquier ayuda es apreciada.
Se kCGImageAlpha*
valores de enumeración kCGImageAlpha*
llenan los primeros cinco bits en CGBitmapInfo
. Sin embargo, dado que el sistema de tipo C no puede expresar esto, aparece una advertencia de que los tipos no coinciden, a pesar de que tenían la intención de hacerlo.
La solución correcta es convertir su valor de enumeración alfa a CGBitmapInfo
, ya que eso es lo que es:
(CGBitmapInfo)kCGImageAlphaPremultipliedFirst
Vio un comentario https://github.com/inkling/Subliminal/issues/23 por aegolden que la intención de la nueva advertencia XCode podría estar dirigiéndolo a usar diferentes máscaras en estos tipos de enumeración para construir y concatenar varias banderas. Entonces, en lugar de solo usar kCGImageAlphaPremultipliedFirst, usa
(kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedFirst)
La advertencia desaparecerá después de este cambio.