2012-08-14 65 views
0

我有一个NSSegmentedControl设置为发件人,当用户单击对象中的每个按钮时添加函数。下面的代码片段对我来说一直很好。它仍然如此,但是当我使用64位体系结构构建时,我收到以下警告。当我恢复到32位时,警告消失。有人可以告诉我如何编辑代码? 感谢您的帮助。 - 保罗。可可NSInteger在64位体系结构构建时

“隐式转换损失整数精度:NSInteger的(又名长),以‘INT’

int selectedSegment = [arSegController selectedSegment]; 
int clickedSegmentTag = [[arSegController cell] tagForSegment:selectedSegment]; 

if (clickedSegmentTag == 0) { 

回答

1

您需要使用NSInteger而不是int为您的变量可以只是看在声明中NSSegmentedControl.h,但更好的是阅读苹果的64-Bit Transition Guide for Cocoa

+0

谢谢分配。知道它整理出来了... - 保罗。 – Paul 2012-08-14 15:16:24

+0

当然,很乐意提供帮助。请点击答案左边的复选标记,将其标记为“已接受”;接受答案将有助于您日后获得更多答案。谢谢! – 2012-08-14 15:20:21

1

一个NSInteger无非是typedef定义更长时间。您应该使用NSInteger的,但如果由于某种原因,你需要使用INT然后尝试类型转换。

int selectedSegment = (int)[arSegController selectedSegment]; 
1

64 bit guide

我相信你长到一个int是4个字节长指派的8个字节长的变量。我认为在mac中他们使用LP64,这意味着long和指针获得8个字节。声明selectedSegment NSInteger以及应该解决问题。在32位机器上,长度将是32位,而在64位机器上,它将是64位。

NSInteger selectedSegment = [arSegController selectedSegment]; 
NSInteger clickedSegmentTag = [[arSegController cell] tagForSegment:selectedSegment]; 

if (clickedSegmentTag == 0) { 
0

NSInteger似乎被定义为在64位平台上长(所以在32位OS X和iOS上你不会得到这个警告)。而且,在这些平台上,long长度为64位,而int只是32位 - 所以,正如编译器告诉你的那样,你会失去精度。 Numbers> = 2^32不能用32位表示,因此对于这些数字,您可能会遇到一些奇怪的行为(与数字被截断有关)。

解决方法:明确地将方法的返回值转换为(int)