我正在查询NSDictionary的值。因为我遇到了问题,我打印了这个物体。它向我展示了以下内容:
<CFString 0x5d33630 [0x26af380]>{contents = "myDictionaryItem"} = <CFNumber 0x5d58940 [0x26af380]>{value = +1286301600, type = kCFNumberSInt64Type}
因此它是有符号64位整数的类型。所以我试着像这样提取值
NSString *myString = [NSString stringWithFormat:@"%qi", [myDictionary objectForKey:@"myDictionaryItem"]];
这给了我一个值,但值不是字典中的值。
我也试过这个
long long my64bitsignedIntegerValue = (long long)[myDictionary objectForKey:@"myDictionaryItem"];
但是我收到警告Cast from pointer to integer of different size
。这不起作用,因为stringWithFormat
返回的类型为id
。我发现post id
类型为UInt32
。并且有符号的64位整数不是无符号的32位整数,所以我得到了这个警告。如果我忽略警告,则值仍然是错误的。
我想拥有的价值是1286301600.有符号整数(-2.147.483.648到2.147.483.647)可以做我想要的事情。我不明白为什么Cocoa试图制作64位有符号整数。
如何提取字典的64位有符号整数并将其用作变量?
答案 0 :(得分:0)
[myDictionary objectForKey:@"myDictionaryItem"]
返回对象(我想 - NSNumber),而不是标量数。如果它确实是一个NSNUmber对象,那么你可以使用以下函数之一从中获取一个数字:
-intValue
-longValue
-longLongValue
以下行必须从您的号码中生成正确的字符串:
NSString *myString = [NSString stringWithFormat:@"%qi", [[myDictionary objectForKey:@"myDictionaryItem"] intValue]];
答案 1 :(得分:0)
你想:
[[myDictionary objectForKey:@"myDictionaryItem"] integerValue];
或
[[myDictionary objectForKey:@"myDictionaryItem"] longLongValue];
CFNumber / NSNumber是一个围绕数字原语的包装器对象。
答案 2 :(得分:0)
我猜这是一个NSNumber,所以这样的事情应该有效:
NSNumber *num = [myDictionary objectForKey:@"myDictionaryItem"];
long numAsLong = [num longValue];
long long numAsLongLong = [num longLongValue];
等