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
。