使用objectAtIndex Objective-C时错误的值

Ron*_*ann 1 indexing objective-c return-value nsarray

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

NSArray*array = [NSArray arrayWithObjects:
                [NSNumber numberWithLong:50],
                [NSNumber numberWithLong:60], nil];
Run Code Online (Sandbox Code Playgroud)

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

long value = [array objectAtIndex:1];
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

有任何想法吗?

罗纳德

mat*_*att 6

A long不是NSNumber.如果要设置valuelongto [array objectAtIndex:1],则必须将其从NSNumber转换为long.您可能希望呼吁longValueNSNumber这样做.

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

您的调试器屏幕截图非常好.请注意,如果你在它仔细看现在,你的头脑清醒,它是关于差异之间很清楚value这是一个long,一方面,和array[0]这是一个NSNumber包裹长,对其他.所以调试器实际上一直在回答你的问题!

  • 这不是演员.这是关于包装和展开.NSNumber里面有很长的一段时间.你用`numberWithLong`把它放在那里,所以你必须用`longValue`把它拿回来. (2认同)