值转换问题:隐式转换失去整数精度:'NSInteger'(又名'long')到'int32_t'(又名'int')

时间:2014-03-14 06:02:10

标签: ios objective-c gpuimage xcode5.1

我已将我的Xcode版本从5.0升级到5.1&在GPUImage库中出现错误以下  GPUImageVideoCamera.m:301:54:隐式转换失去整数精度:' NSInteger' (又名' long')to' int32_t' (又名' int')

在此行的下方功能" connection.videoMaxFrameDuration = CMTimeMake(1,_frameRate);"发生错误。

- (void)setFrameRate:(NSInteger)frameRate;
{

    _frameRate = frameRate;

    if (_frameRate > 0)
    {

        for (AVCaptureConnection *connection in videoOutput.connections)
        {

            if ([connection respondsToSelector:@selector(setVideoMinFrameDuration:)])

                connection.videoMinFrameDuration = CMTimeMake(1, _frameRate);

            if ([connection respondsToSelector:@selector(setVideoMaxFrameDuration:)])

                connection.videoMaxFrameDuration = CMTimeMake(1, _frameRate);

        }
    }

    else

    {
        for (AVCaptureConnection *connection in videoOutput.connections)

        {
            if ([connection respondsToSelector:@selector(setVideoMinFrameDuration:)])

                connection.videoMinFrameDuration = kCMTimeInvalid; 
                                // This sets videoMinFrameDuration back to default

            if ([connection respondsToSelector:@selector(setVideoMaxFrameDuration:)])

                connection.videoMaxFrameDuration = kCMTimeInvalid; 
                                // This sets videoMaxFrameDuration back to default

        }
    }
}

enter image description here

1 个答案:

答案 0 :(得分:9)

问题与architecture有关。如果您在Xcode 5.1中打开现有项目,它的默认arch设置是64位体系结构。

请参阅Xcode 5.1 release nots

中的这一行
  

注意:打开时请注意以下体系结构问题   Xcode 5.1中的现有项目:

  • 构建所有体系结构时,请删除任何显式体系结构 体系结构设置和使用默认的标准体系结构 设置。对于之前选择使用“标准版”的项目 包括64位的架构“,切换回”标准版 建筑“设置。
  • 首次打开现有项目时,Xcode 5.1可能会 显示有关使用Xcode 5.0体系结构的警告 设置。选择警告提供了修改的工作流程 设置。
  • 不支持64位的项目需要专门设置 架构构建设置不包括64位。

您可以在this apple's doc中看到此行。

  

NSInteger在64位代码中更改大小。使用NSInteger类型   贯穿Cocoa Touch;它是32位运行时中的32位整数   和64位运行时中的64位整数。所以收到时   使用NSInteger类型的框架方法中的信息   保存结果的NSInteger类型。

但是int is a 32-bit integer,所以只有这会出现这个错误。您可以通过将架构设置为standard architecture including 64-bit或执行简单类型转换来解决此问题。

connection.videoMinFrameDuration = CMTimeMake((int64_t)1, (int32_t)_frameRate);

请参阅CMTimeMake语法。

CMTime CMTimeMake (
   int64_t value,
   int32_t timescale
);