У меня есть object_getInstanceVariable
для работы как here, но, похоже, он работает только для поплавков, bools и ints не удваивается. Я подозреваю, что я делаю что-то не так, но я был в кругах с этим.object_getInstanceVariable работает для float, int, bool, но не для double?
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) также является правильным.
Должно быть, я делаю что-то основное, что я не могу видеть, поэтому я был бы признателен, если бы кто-нибудь мог это указать.
Так вот почему!Я потратил час, пытаясь понять, что происходит! Хорошее объяснение тоже. –
Переменная obj никогда не определяется в методе, указанном выше, на самом деле должна быть self, correct? – wbyoung
Э-э, да, вы абсолютно правы. –