Objective c Xcode 5.0.1关于Mavericks:我如何消除这个警告?
我有一段代码,使用图像的alpha通道创建遮罩。在升级到Mavericks之前,它工作得很好,而且我在Xcode调试控制台中从未收到任何警告或错误。升级后,我收到以下警告: 从枚举类型“enum CGImageAlphaInfo”隐式转换为不同的枚举类型“CGBitmapInfo”(也称为“enum CGBitmapInfo”) 标记为问题的行:Objective c Xcode 5.0.1关于Mavericks:我如何消除这个警告?,objective-c,xcode,enums,warnings,Objective C,Xcode,Enums,Warnings,我有一段代码,使用图像的alpha通道创建遮罩。在升级到Mavericks之前,它工作得很好,而且我在Xcode调试控制台中从未收到任何警告或错误。升级后,我收到以下警告: 从枚举类型“enum CGImageAlphaInfo”隐式转换为不同的枚举类型“CGBitmapInfo”(也称为“enum CGBitmapInfo”) 标记为问题的行: CGBitmapContextCreate(alphaData, width, height, 8, rowBytes, NULL, kCGImage
CGBitmapContextCreate(alphaData, width, height, 8, rowBytes, NULL, kCGImageAlphaOnly);
以下是文档对最后一个参数(akakgimagealphaonly
)的说明:
bitmapInfo
常量,用于指定位图是否应包含alpha通道、alpha通道在像素中的相对位置以及有关像素组件是浮点值还是整数值的信息。用于指定alpha通道信息的常数使用CGImageAlphaInfo
类型声明,但可以安全地传递到此参数。您还可以传递与CGBitmapInfo
类型关联的其他常量
奇怪的是,在文档()中,苹果的typedef没有列出我正在使用的选项。然而,在下面的术语列表中,它确实存在!它是这样说的:
KCGIMAGEALPHONLY
没有颜色数据,只有alpha通道。在OS X v10.3及更高版本中提供。在
CGImage.h
中声明
考虑到我想要创建一个alpha蒙版,我对任何颜色数据都不感兴趣,所以我使用的参数是唯一有意义的。我不知道它要我做什么。无论如何,该方法是有效的,当应用程序运行时,一切都很好。话虽如此,这些警告真的很烦人。有没有特别的叮当声指令让它安静下来?任何帮助都将不胜感激。干杯。问题是您正在让编译器进行隐式转换。修复方法是通过强制转换使转换显式:
CGBitmapContextCreate(alphaData,宽度,高度,8,行字节,空,(CGBitmapInfo)kCGImageAlphaOnly)代码>
仅仅因为函数的实现允许给定参数具有多种类型的值(如文档中所述),并不意味着它可以被定义为编译器不会抱怨它。C不允许您将参数定义为接受多个类型,您必须选择一个。在这种情况下,CGBitmapContextCreate
定义为:
CGContextRef CGBitmapContextCreate (
void *data,
size_t width,
size_t height,
size_t bitsPerComponent,
size_t bytesPerRow,
CGColorSpaceRef colorspace,
CGBitmapInfo bitmapInfo
);
请注意底部的CGBitmapInfo
类型。这意味着,即使CGImageAlphaInfo
值在技术上是合法的,它们仍然需要强制转换才能通过类型检查器。问题在于,您让编译器进行隐式转换。修复方法是通过强制转换使转换显式:
CGBitmapContextCreate(alphaData,宽度,高度,8,行字节,空,(CGBitmapInfo)kCGImageAlphaOnly)代码>
仅仅因为函数的实现允许给定参数具有多种类型的值(如文档中所述),并不意味着它可以被定义为编译器不会抱怨它。C不允许您将参数定义为接受多个类型,您必须选择一个。在这种情况下,CGBitmapContextCreate
定义为:
CGContextRef CGBitmapContextCreate (
void *data,
size_t width,
size_t height,
size_t bitsPerComponent,
size_t bytesPerRow,
CGColorSpaceRef colorspace,
CGBitmapInfo bitmapInfo
);
请注意底部的CGBitmapInfo
类型。这意味着,即使CGImageAlphaInfo
值在技术上是合法的,它们仍然需要强制转换才能通过类型检查器。可能重复的可能重复的可能重复的我甚至没有想到要这样做。我不是很聪明。谢谢你,伙计。你知道为什么小牛队没有抱怨吗?我是Xcode游戏的新手,所以我假设我所有的设置都和小牛赛前一样。对吧?:-)我猜编译器只是在增强它的转换游戏,嗯?不管怎样,谢谢你的快速修复。@BenStock这个问题与小牛队无关。这是一个编译器问题。人们已经在Xcode的早期版本中看到了这个问题。在升级到Mavericks之前,您使用的是什么版本的Xcode?是的,它不是Mavericks的东西。当使用LLVM/CLANG时,这种检查总是可用的(尽管我不确定它是否默认打开)。如果您以前没有看到这一点,而现在看到了,可能是因为您刚刚切换到LLVM/CLANG,或者构建设置中的“隐式枚举转换”选项出于某种原因刚刚被打开。@jemmons:我就是这么想的。每次更新都会带来新的惊喜!谢谢你的帮助。如果我发布我的应用程序,您将在“关于”窗口中的“坏蛋”下列出。:-)@rmaddy:我使用的版本有iOS的风格和测试机器人,所以我猜…Xcode 5.0.0?现在几乎完全一样了,但我注意到文档查看器略有变化。奇怪,我都没想过要这么做。我不是很聪明。谢谢你,伙计。你知道为什么小牛队没有抱怨吗?我是Xcode游戏的新手,所以我假设我所有的设置都和小牛赛前一样。对吧?:-)我猜编译器只是在增强它的转换游戏,嗯?不管怎样,谢谢你的快速修复。@BenStock这个问题与小牛队无关。这是一个编译器问题。人们已经在Xcode的早期版本中看到了这个问题。在升级到Mavericks之前,您使用的是什么版本的Xcode?是的,它不是Mavericks的东西。当使用LLVM/CLANG时,这种检查总是可用的(尽管我不确定它是否默认打开)。如果您以前没有看到这一点,而现在看到了,可能是因为您刚刚切换到LLVM/CLANG,或者构建设置中的“隐式枚举转换”选项出于某种原因刚刚被打开。@jemmons:我就是这么想的。每次更新都会带来新的惊喜!谢谢你的帮助。如果我发布我的应用程序,您将在“关于”窗口中的“坏蛋”下列出。:-)@rmaddy:我使用的版本有iOS风格和测试