繁体   English   中英

正确将32位方法更新为64位支持

[英]Proper updating of a 32bit method to 64bit support

我有一种方法正在尝试更新对我的应用程序的64位支持。 我有很多这样的warnings

问题出在以下示例中。 我得到警告:

隐式转换将整数精度NSInteger转换为int

- (int)  aMethod {
    NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
    return [u integerForKey:@"someKey"];
}

如果将返回类型更改为NSInteger我会得到

aMethod int与NSInteger的实现中冲突的返回类型

-(NSInteger)  aMethod {
    NSUserDefaults *u = [NSUserDefaults standardUserDefaults];
    return [u integerForKey:@"someKey"];
}

我试过转换返回类型

return (NSInteger)[u integerForKey:@"someKey"];

要么

return (long)[u integerForKey:@"someKey"];

但是除非将其强制转换为(int),否则我无法消除错误

return (int)[u integerForKey:@"someKey"];

我已经阅读了很多SO问题,但是我似乎找不到很好的答案。

更新此方法的正确方法是什么?

方法:

- (int) aMethod ...

返回int类型的值。 该方法可能首先在标头( .h )文件中声明,然后在实现( .m )文件中定义。

该声明:

return [u integerForKey:@"someKey"];

返回调用integerForKey:的结果,它是NSInteger类型的值。

NSInteger不是(Objective-)C 语言定义的类型,而是在框架中定义的类型别名typedef ),用于表示平台上的“自然”整数大小。 它是一个别名int在32位的平台和long 64位。

因此,编译器错误告诉您(现在)64位值将被截断以适合32位结果。 没有解决此问题的正确方法,这取决于与@someKey关联的值的@someKey是:

  • 如果该值现在应为64位,则更改aMethod的返回类型; aMethod ,返回aMethod 在单独的声明中(如果有的话)以及在执行中; NSInteger 您还需要检查在调用该方法的任何地方返回NSInteger值都是可接受的,并且可能需要对变量类型等进行后续更改。您还需要查看与键关联的值在哪里组。
  • 如果与键关联的值可能仍为32位,则可以使用intForKey:而不是integerForKey并将返回类型保持原样。 您还应该更改将键设置为存储int

HTH

更正

intForKey:上有一个(不再是)便捷方法intForKey: NSUserDefaults 备选方案包括: integerForKey:和强制转换; objectForKey:获取NSNumber引用,然后获取intValue 等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM