Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在64位体系结构中构建时使用Cocoa NSInteger_Cocoa_Nsinteger - Fatal编程技术网

在64位体系结构中构建时使用Cocoa NSInteger

在64位体系结构中构建时使用Cocoa NSInteger,cocoa,nsinteger,Cocoa,Nsinteger,我将NSSegmentedControl设置为发送方,当用户单击对象中的每个按钮时添加函数。下面的片段对我来说总是很好。它仍然可以,但是当我使用64位架构构建时,我得到了以下警告。当我恢复到32位时,警告消失。有人能告诉我如何编辑代码吗? 谢谢你的帮助-保罗 隐式转换丢失整数精度:NSInteger(也称为long)到“int” 对于变量,您需要使用NSInteger而不是int。您可以查看NSSegmentedControl.h中的声明,但最好是阅读Apple的声明。对于变量,您需要使用NSI

我将NSSegmentedControl设置为发送方,当用户单击对象中的每个按钮时添加函数。下面的片段对我来说总是很好。它仍然可以,但是当我使用64位架构构建时,我得到了以下警告。当我恢复到32位时,警告消失。有人能告诉我如何编辑代码吗? 谢谢你的帮助-保罗

隐式转换丢失整数精度:NSInteger(也称为long)到“int”


对于变量,您需要使用
NSInteger
而不是
int
。您可以查看
NSSegmentedControl.h
中的声明,但最好是阅读Apple的声明。

对于变量,您需要使用
NSInteger
而不是
int
。您只需查看
NSSegment>中的声明即可edControl.h
,但更好的方法是阅读苹果的。

NSInteger只不过是一个typedef'd长。您应该使用NSInteger,但如果出于某种原因您需要使用int,请尝试打字

int selectedSegment = (int)[arSegController selectedSegment];

NSInteger只不过是一个typedef'd长。您应该使用NSInteger,但如果出于某种原因需要使用int,请尝试类型转换

int selectedSegment = (int)[arSegController selectedSegment];

我相信您正在将一个8字节长的长变量分配给一个4字节长的整数。我认为在mac中,他们使用LP64,这意味着长,指针得到8字节。声明selectedSegment NSInteger也可以解决这个问题。在32位机器上,长是32位,而在64位机器上,长是64位

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

if (clickedSegmentTag == 0) { 

我相信您正在将一个8字节长的长变量分配给一个4字节长的整数。我认为在mac中,他们使用LP64,这意味着长,指针得到8字节。声明selectedSegment NSInteger也可以解决这个问题。在32位机器上,长是32位,而在64位机器上,长是64位

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

if (clickedSegmentTag == 0) { 

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


解决方案:显式地将方法的返回值强制转换为
(int)

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


解决方案:显式地将方法的返回值强制转换为
(int)

谢谢分配。解决了…-paul。当然,很乐意帮助。请单击我答案左侧的复选标记,将其标记为“已接受”"; 接受答案将帮助你在将来得到更多的答案。谢谢谢谢你。把它解决了-保罗,当然,很乐意帮忙。请点击我答案左边的复选标记,将其标记为“已接受”;接受答案将帮助你在将来得到更多的答案。谢谢