[英]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
是:
aMethod
的返回类型; aMethod
,返回aMethod
。 在单独的声明中(如果有的话)以及在执行中; 到NSInteger
。 您还需要检查在调用该方法的任何地方返回NSInteger
值都是可接受的,并且可能需要对变量类型等进行后续更改。您还需要查看与键关联的值在哪里组。 intForKey:
而不是integerForKey
并将返回类型保持原样。 您还应该更改将键设置为存储int
HTH
更正
在intForKey:
上有一个(不再是)便捷方法intForKey:
NSUserDefaults
备选方案包括: integerForKey:
和强制转换; objectForKey:
获取NSNumber
引用,然后获取intValue
; 等等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.