2014-11-21 61 views
0

我正面临一个非常奇怪的问题。我试图理解发生了什么。 简单地说,我试图插入一个NSInteger到一个NSMutableArray。键是NSMutableArray。键是NSInteger类型。插入类型在NSMutableArray中不匹配

[keys insertObject: [NSNumber numberWithInteger: key] atIndex:insPoint]; 

在xcode控制台中。我可以看到key =(NSInteger)-1。所以键入的是NSInteger,值是-1。但是,当我运行上面的代码并检查键中的内容时。它显示(_NSCFNumber *)长7205759403792935. 如果我改变了代码

[keys insertObject: [NSNumber numberWithInt: key] atIndex:insPoint]; 

它正确地显示(_NSCFNumber *)INT -1。 我也试过用的NSLog和numberWithInt numberWithInteger

NSLog(@"%@",[NSNumber numberWithInteger: key]); 
NSLog(@"%@",[NSNumber numberWithInt: key]); 

他们都显示-1。我也试过

NSInteger a=-2; 
[keys insertObject: [NSNumber numberWithInteger: a] atIndex:insPoint]; 
#also have some wierd number, but it works for positive number 

什么问题? 有什么建议吗?

+0

什么是“有线号码”?现在所有的数字都带有内置的Wi-Fi ......无论如何 - 有符号与无符号表示是关键。 – 2014-11-21 05:40:41

+0

这是“wierd”的美国单词。 – 2014-11-21 05:43:05

+0

你会认真写你的示例代码,因为它,我不明白的情况。 – Jageen 2014-11-21 06:17:09

回答

1

7205759403792935大于32位。 该值为-1,56位整数。

+0

56位... - 可能是一个标记的指针? (只是猜测) – 2014-11-21 05:42:58

+0

你是唯一的一个 – 2014-11-23 01:41:07

+0

为了帮助你找到解决方案,我想问一些进一步的信息...... 1:你正在为(ARM,Intel或PowerPC)构建哪种体系结构? 2:你需要32位还是64位精度? 3:尝试'NSLog(@“%s”,[[keys objectAtIndex:insPoint] objCType]);'' – 2014-11-23 05:22:09