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