我有一个包含两个元素50和60的数组:
NSArray*array = [NSArray arrayWithObjects:
[NSNumber numberWithLong:50],
[NSNumber numberWithLong:60], nil];
稍后使用数组时(事实上我将此数组作为默认列表写入plist文件)我这样做:
long value = [array objectAtIndex:1];
此值包含 15559 后,我不明白。在调试器中 [array objectAtIndex:1] 清楚地显示(长)60 。
对不起,我看不出有什么问题;(
有什么想法吗?
罗纳德
答案 0 :(得分:6)
long
不是NSNumber
。如果您要将value
设置为long
至[array objectAtIndex:1]
,则必须将其从NSNumber转换为长整数。您可能希望在NSNumber上调用longValue
来执行此操作。
你可能想知道编译器为什么不抱怨并在这里帮助你。这可能是因为数组中的对象被取为id,所以大多数赌注都是关闭的。这是数组的一个常见问题:知道你要提取什么,以及如何处理它,取决于你。
您的调试器屏幕截图非常棒。请注意,如果您现在仔细查看它,清楚地看清楚,value
与long
和array[0]
之间的差异非常明显。一个长的NSNumber,另一个。所以调试器实际上一直在回答你的问题!
答案 1 :(得分:2)
这是因为您没有在从数组中获取的对象上调用longValue
:
long value = [[array objectAtIndex:1] longValue];
您的代码获得的是NSValue
的地址,它会转换为与您存储在数组中的数字无关的“垃圾”long
值。< / p>