我将NSSegmentedControl设置为发件人,在用户点击对象中的每个按钮时添加功能。下面的片段对我来说总是很好。它仍然存在,但是当我使用64位架构构建时,我收到以下警告。当我恢复到32位时,警告消失了。有人可以告诉我如何编辑代码? 谢谢您的帮助。 -Paul。
“隐式转换失去整数精度:NSInteger(又名长)到”int“
int selectedSegment = [arSegController selectedSegment];
int clickedSegmentTag = [[arSegController cell] tagForSegment:selectedSegment];
if (clickedSegmentTag == 0) {
答案 0 :(得分:1)
您需要使用NSInteger
代替int
作为变量。您可以查看NSSegmentedControl.h
中的声明,但最好是阅读Apple的64-Bit Transition Guide for Cocoa。
答案 1 :(得分:1)
NSInteger只不过是一个typedef'd long。您应该使用NSInteger,但如果由于某种原因您需要使用int,那么请尝试进行类型转换。
int selectedSegment = (int)[arSegController selectedSegment];
答案 2 :(得分:1)
我相信你将一个8字节长的长变量分配给一个4字节长的int。我认为在mac中他们使用LP64,这意味着long和指针获得8个字节。声明selectedSegment NSInteger也应该解决问题。在32位机器上,长度为32位,而在64位机器上则为64位。
NSInteger selectedSegment = [arSegController selectedSegment];
NSInteger clickedSegmentTag = [[arSegController cell] tagForSegment:selectedSegment];
if (clickedSegmentTag == 0) {
答案 3 :(得分:0)
NSInteger似乎在64位平台上被定义为很长(因此在32位OS X和iOS上你不会得到这个警告)。此外,在这些平台上,long是64位长,而int只是32位 - 因此,正如编译器告诉你的那样,你的精度会降低。数字> = 2 ^ 32不能用32位表示,因此对于这些数字,您可能会遇到一些奇怪的行为(与被截断的数字相关)。
解决方案:将方法的返回值显式转换为(int)
。