格式指定类型“int”,但参数的类型为“UIViewContentMode”

Posted

技术标签:

【中文标题】格式指定类型“int”,但参数的类型为“UIViewContentMode”【英文标题】:Format specifies type 'int' but the argument has type 'UIViewContentMode' 【发布时间】:2013-12-08 22:18:37 【问题描述】:

我在 Xcode 中收到警告:

格式指定类型'int'但参数有类型 'UIViewContentMode'

我有一个方法用于调整UIImage 的大小,如下所示:

- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode
                                  bounds:(CGSize)bounds
                    interpolationQuality:(CGInterpolationQuality)quality 
    CGFloat horizontalRatio = bounds.width / self.size.width;
    CGFloat verticalRatio = bounds.height / self.size.height;
    CGFloat ratio;

    switch (contentMode) 
        case UIViewContentModeScaleAspectFill:
            ratio = MAX(horizontalRatio, verticalRatio);
            break;

        case UIViewContentModeScaleAspectFit:
            ratio = MIN(horizontalRatio, verticalRatio);
            break;

        default:
            [NSException raise:NSInvalidArgumentException format:@"Unsupported content mode: %d", contentMode];
    
...

UIViewContentMode 似乎引用了一个整数,所以我不确定这个警告:

typedef NS_ENUM(NSInteger, UIViewContentMode) 
    UIViewContentModeScaleToFill,
    UIViewContentModeScaleAspectFit,      // contents scaled to fit with fixed aspect. remainder is transparent
    UIViewContentModeScaleAspectFill, ... 

我怎样才能摆脱这个似乎不正确的警告?异常中的NSLog 是否正确?

【问题讨论】:

【参考方案1】:

您可以像这样将NSInteger UIViewContentMode 转换为int

[NSException raise:NSInvalidArgumentException format:@"Unsupported content mode: %d", (int)contentMode];

【讨论】:

谢谢两位,我之前尝试使用 (NSInteger) 进行投射。

以上是关于格式指定类型“int”,但参数的类型为“UIViewContentMode”的主要内容,如果未能解决你的问题,请参考以下文章

格式“%d”需要“int”类型的参数,但参数 2 的类型为“int *”

以下 C 代码显示:格式 '%s' 需要类型为 'char *' 的参数,但参数 3 的类型为 int

警告:格式“%d”需要类型“int”,但参数 2 的类型为“int (*)(int *)”[关闭]

警告:格式“%d”需要“int”类型的参数,但参数 2 的类型为“long int”[-Wformat=]

C 语言:收到错误:警告:格式“%d”需要“int *”类型的参数,但参数 2 的类型为“int **”[-Wformat=]

警告:格式“%ld”需要“long int”类型的参数,但参数的类型为“__builtin_neon_di”