【问题标题】:Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'隐式转换失去整数精度:“NSInteger”(又名“long”)到“int”
【发布时间】:2019-08-01 14:24:28
【问题描述】:

我正在尝试构建一个项目来分发这个应用程序。 但是 - 这个应用程序,远远太旧了。 所以,我使用的是 Xcode 8.3.3 和 IOS Sierra。

我遇到了问题 SistemaCardapio/SistemaCardapioAppDelegate.m:60:28:隐式转换失去整数精度:'NSInteger'(又名'long')到'int'

ARC - 停用所有需要的构建项目。

我已经尝试过处理它,手把手地做,但是要修复的项目太多。

int timeOutParaImpressao = 0;
timeOutParaImpressao = [preferencias integerForKey:@"timeout_impressao"];
if (timeOutParaImpressao == 0) {
    NSLog(@"sem timeout pra impressao definido");
    timeOutParaImpressao = 20;
    [preferencias setInteger:timeOutParaImpressao forKey:@"timeout_impressao"];
}
configuracoes.timeOutImpressao = timeOutParaImpressao;

我想删除这个警告,并在 Xcode 上编译项目。

【问题讨论】:

  • 那么问题是什么?警告不会阻止编译项目,那么问题是什么?是你不知道该做什么,还是因为“项目太多”而你不想不想去做?还是您只是想压制警告并忽略它们,即使它们是正确的?
  • 警告在理论上阻止了构建。那么有没有办法不阻止 - 问题中给出的警告正在完成构建?看,我有 1600 多个要修复,我今天要杀了它。
  • 好吧,int 不是integer。所以int 总是声明timeOutParaImpressao 的错误方式,如果我们要继续使用integerForKey 等。你可以修复它或不修复它,但如果你这样做,你会一个接一个地做.有多少或您的时间范围是多少,与我们无关。

标签: objective-c implicit-conversion implicit


【解决方案1】:

警告很清楚:timeOutParaImpressao 被声明为 int,这是一个 32 位整数,integerForKey 在 64 位机器上返回一个 64 位整数。

解决方案:将timeOutParaImpressao 声明为NSInteger

NSInteger timeOutParaImpressao = 0;

认真对待警告并修复它们。

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多