使用objectAtIndex Objective-C时错误的值

时间:2012-11-25 05:22:48

标签: objective-c indexing nsarray return-value

我有一个包含两个元素50和60的数组:

NSArray*array = [NSArray arrayWithObjects:
                [NSNumber numberWithLong:50],
                [NSNumber numberWithLong:60], nil];

稍后使用数组时(事实上我将此数组作为默认列表写入plist文件)我这样做:

long value = [array objectAtIndex:1];

此值包含 15559 后,我不明白。在调试器中 [array objectAtIndex:1] 清楚地显示(长)60

enter image description here

对不起,我看不出有什么问题;(

有什么想法吗?

罗纳德

2 个答案:

答案 0 :(得分:6)

long不是NSNumber。如果您要将value设置为long[array objectAtIndex:1],则必须将其从NSNumber转换为长整数。您可能希望在NSNumber上调用longValue来执行此操作。

你可能想知道编译器为什么不抱怨并在这里帮助你。这可能是因为数组中的对象被取为id,所以大多数赌注都是关闭的。这是数组的一个常见问题:知道你要提取什么,以及如何处理它,取决于你。

您的调试器屏幕截图非常棒。请注意,如果您现在仔细查看它,清楚地看清楚,valuelongarray[0]之间的差异非常明显。一个长的NSNumber,另一个。所以调试器实际上一直在回答你的问题!

答案 1 :(得分:2)

这是因为您没有在从数组中获取的对象上调用longValue

long value = [[array objectAtIndex:1] longValue];

您的代码获得的是NSValue地址,它会转换为与您存储在数组中的数字无关的“垃圾”long值。< / p>