Ios NSValue getValue:方法在iPhone 6上返回垃圾值,但在iPhone 5上返回正确值

Ios NSValue getValue:方法在iPhone 6上返回垃圾值,但在iPhone 5上返回正确值,ios,nsvalue,Ios,Nsvalue,我将一个NSInteger存储在NSValue中,当检索回该值时,我得到一个垃圾值。有趣的是,我在iphone6上得到了这个垃圾值,而在iphone5上得到了正确的垃圾值 以下是我代码的一部分: NSValue *unknown = nil; [self getValueForUnknown:&unknown]; if (unknown) { NSInteger unknownInt; [unknown getValue:&unknownInt];

我将一个
NSInteger
存储在
NSValue
中,当检索回该值时,我得到一个垃圾值。有趣的是,我在iphone6上得到了这个垃圾值,而在iphone5上得到了正确的垃圾值

以下是我代码的一部分:

NSValue *unknown = nil;

[self getValueForUnknown:&unknown];

if (unknown) {
    NSInteger unknownInt;
    [unknown getValue:&unknownInt];

    NSLog(@"%lu", (unsigned long)unknownInt);    // prints the correct value on iPhone 5 but a garbage value on iPhone 6
}

...

- (void)getValueForUnknown:(NSValue **)unknownArg {
    int x = 0;
    *unknownArg = [NSValue value:&x withObjCType:@encode(int)];
}

注意:两台设备都在运行iOS 9.3.1

我参考了Apple文档,了解NSValue的正确用法,并发现:


我试图将
int
值返回到
NSInteger
变量中,在将
unknownIt
声明为
int
后,现在一切都正常了。

我参考了苹果文档,了解NSValue的正确用法,发现:


我试图将
int
值返回到
NSInteger
变量中,在将
unknownInt
声明为
int
后,现在一切正常。

使用
NSLog(@“%lu”,无符号长)unknownInt)时会发生什么情况?它在iPhone 5上运行时打印值0,但在iPhone 6上打印为垃圾值。你确定吗?它们都是64位的吗?只要在谷歌上快速搜索一下,就会发现iPhone5是32位的,而iPhone6是64位的。。但是仍然
NSInteger
应该能够保持
int
,64位或不:-/问题是在32位和64位平台下使用
%lu
NSInteger
。您始终需要将其强制转换为
无符号long
?它在iPhone 5上运行时打印值0,但在iPhone 6上打印为垃圾值。你确定吗?它们都是64位的吗?只要在谷歌上快速搜索一下,就会发现iPhone5是32位的,而iPhone6是64位的。。但是仍然
NSInteger
应该能够保持
int
,64位或不:-/问题是在32位和64位平台下使用
%lu
NSInteger
。您始终需要将其强制转换为
无符号long