相关疑难解决方法(0)

object_getInstanceVariable适用于float,int,bool,但不适用于double?

我必须在这里object_getInstanceVariable工作,但它似乎只适用于花车,bools和int不是双打.我确实怀疑自己做错了什么,但我一直在这么做.

float myFloatValue;
float someFloat = 2.123f;
object_getInstanceVariable(self, "someFloat", (void*)&myFloatValue);
Run Code Online (Sandbox Code Playgroud)

有效,myFloatValue = 2.123

但是当我尝试

double myDoubleValue;
double someDouble = 2.123f;
object_getInstanceVariable(self, "someDouble", (void*)&myDoubleValue);
Run Code Online (Sandbox Code Playgroud)

我得到myDoubleValue = 0.如果我尝试myDoubleValue在功能之前设置,例如.double myDoubleValue = 1.2f,当我在object_getInstanceVariable通话结束后读取它时,该值不变.myIntValuegetinstancevar上面的函数之前设置为其他值应该返回2,即.它已被改变.

然后我试了

Ivar tmpIvar = object_getInstanceVariable(self, "someDouble", (void*)&myDoubleValue);
Run Code Online (Sandbox Code Playgroud)

如果我这样做,ivar_getName(tmpIvar)我会得到"someDouble",但myDoubuleValue = 0仍然!然后我尝试ivar_getTypeEncoding(tmpIvar),我应该得到"d".

总而言之,如果typeEncoding = float,它是有效的,如果它是一个double,结果没有设置,但它正确读取变量,返回值(Ivar)也是正确的.

我必须做一些我无法看到的基本错误,所以如果有人能指出它,我会很感激.

objective-c return-value objective-c-runtime

12
推荐指数
1
解决办法
5538
查看次数

使用CGPoint的object_setInstanceVariable

有谁知道如何使用object_setInstanceVariable设置结构变量?它适用于参考类型:

object_setInstanceVariable(obj, "_variable", ref);
Run Code Online (Sandbox Code Playgroud)

但不适用于CGPoint等结构.尝试以下方式:

1. object_setInstanceVariable(obj, "_variable", point);
2. object_setInstanceVariable(obj, "_variable", &point);
3. object_setInstanceVariable(obj, "_variable", (void **)&point);
Run Code Online (Sandbox Code Playgroud)

我不确定我理解我在做什么(尤其是最后一步)......

提前谢谢你!!!

iphone iphone-privateapi ios

3
推荐指数
1
解决办法
1427
查看次数

object_getIvar无法读取BOOL iVar的值

object_getIvar(id对象,Ivar ivar)正确读取iVArs的值,但在BOOL类型iVar上失败并崩溃.我需要一个类的所有iVars的值.有什么方法可以解决它.

iphone objective-c-runtime

0
推荐指数
2
解决办法
1990
查看次数