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