У меня object_getInstanceVariable
работает здесь, но, похоже, он работает только для float, bools и ints, а не для пар. Я подозреваю, что я делаю что-то не так, но я был в кругах с этим.
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
, он работает, если он является двойным, результат не задан, но он правильно считывает переменную, а возвращаемое значение (Ivar) также корректно.
Я должен делать что-то основное, что я не могу видеть, поэтому я был бы признателен, если бы кто-нибудь мог указать на это.