1

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

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

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

long value = [array objectAtIndex:1];

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

在此处输入图像描述

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

有任何想法吗?

罗纳德

4

2 回答 2

6

Along不是NSNumber. 如果要设置value为 a long[array objectAtIndex:1]则必须将其从 NSNumber 转换为 long。您可能希望调用longValueNSNumber 来执行此操作。

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

您的调试器屏幕截图非常棒。请注意,如果您现在仔细看,头脑清晰,很清楚一方面value是 a long,另一方面array[0]是 NSNumber 包装长。所以调试器实际上一直在回答你的问题!

于 2012-11-25T05:26:46.393 回答
2

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

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

您的代码获得的是 的地址NSValue该地址被转换为long与您存储在数组中的数字无关的“垃圾”值。

于 2012-11-25T05:26:34.177 回答