2016-05-16 5 views
1

NSIntegerNSValueに格納しています。値を取得している間にガーベジ値が取得されています。NSValue getValue:メソッドはiPhone 6ではガベージ値を返しますが、iPhone 5では正しい値を返します

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

を実行している興味深い部分は、私のコードの一部であり、ここで

私はiPhone 5にiPhone 6でこのゴミ値と正しいものを取得しています

ということです
+0

NSLog(@ "%lu"、(unsigned long)unknownInt)を使用するとどうなりますか? – trojanfoe

+0

iPhone 5で実行すると値0が表示されますが、iPhone 6ではガベージ値が表示されます。 – enigma

+0

本当ですか?両方とも64ビットですか? – trojanfoe

答えて

0

私はNSValueの正しい使用方法については、Appleのドキュメントを参照して、この発見:

enter image description here

intの値をNSInteger変数に戻そうとしていましたが、unknownIntintとして宣言したところ、すべて正常に機能しています。

関連する問題