私はここでobject_getInstanceVariable
仕事をしなければなりませんが、それはフロート、ブール、イントでのみ機能し、ダブルでは機能しないようです。私は何か間違ったことをしているのではないかと思いますが、私はこれと輪になって行ってきました。
float myFloatValue;
float someFloat = 2.123f;
object_getInstanceVariable(self, "someFloat", (void*)&myFloatValue);
動作し、myFloatValue = 2.123
でもやってみると
double myDoubleValue;
double someDouble = 2.123f;
object_getInstanceVariable(self, "someDouble", (void*)&myDoubleValue);
取得しmyDoubleValue = 0
ます。関数の前に設定しようとするとmyDoubleValue
、たとえば。double myDoubleValue = 1.2f
、object_getInstanceVariable
呼び出し後に読んだときの値は変わりません。myIntValue
上記の関数の前に他の値に設定するとgetinstancevar
、2が返されます。変更されました。
それから私は試しました
Ivar tmpIvar = object_getInstanceVariable(self, "someDouble", (void*)&myDoubleValue);
私がそうするならば、私はivar_getName(tmpIvar)
「someDouble」を手に入れます、しかしmyDoubuleValue = 0
それでも!それから私は試しivar_getTypeEncoding(tmpIvar)
てみて、あるべき「d」を取得します。
要約するとtypeEncoding = float
、が機能する場合、それがdoubleの場合、結果は設定されませんが、変数を正しく読み取り、戻り値(Ivar)も正しいです。
私は私が見ることができない基本的な間違ったことをしているに違いないので、誰かがそれを指摘してくれれば幸いです。