gpt4 book ai didi

objective-c - 初始化 'Method *' C 时不兼容的指针类型

转载 作者:行者123 更新时间:2023-11-30 17:39:14 25 4
gpt4 key购买 nike

我使用此方法来记录给定类的实例变量。我有一个数组,其中包含 Apples API 中的所有类,并且我在此方法中使用该数组作为给定的类。但我不断收到警告(下面​​的警告),我认为这就是导致它在控制台的实例部分下不记录任何内容的原因。我有另一种与此几乎相同的方法,它记录了给定类的方法,效果很好。

方法: NSArray *BNRInstanceVariables(Class cls) {

    const char instanceCount = 0;

Method *instanceList = class_getInstanceVariable(cls, &instanceCount);

NSMutableArray *instanceArray = [NSMutableArray array];

for (int j = 0; j < instanceCount; j++) {

Method currentMethod = instanceList[j];

SEL methodSelector = method_getName(currentMethod);

[instanceArray addObject:NSStringFromSelector(methodSelector)];
}

return instanceArray;
}

警告:使用“Ivar”类型的表达式(又名“struct objc_ivar *”)初始化“Method *”(又名“struct objc_method **”)时不兼容的指针类型

结果:

   classname = "__NSTaggedDate";
hierarchy = (
NSObject,
NSDate,
"__NSTaggedDate"
);
instance = (
);
methods =

问题解答:我明白了!!!这是更新后的代码。感谢 nkongara,我将方法 class_getInstanceVariable 更改为 Ivar* class_copyIvarList 并修复了它,但我的方法 currentMethod 行遇到了另一个问题,所以我将方法更改为 Ivar 并再次解决,但又提出了另一个问题,所以最后但并非最不重要的我更改了 SEL 行到 const char* ivar_getName()。

NSArray *BNRInstanceVariables(Class cls) {

unsigned int instanceCount = 0;

Ivar* ivars = class_copyIvarList(cls, &instanceCount);

NSMutableArray *instanceArray = [NSMutableArray array];

for (int j = 0; j < instanceCount; j++) {

Ivar currentMethod = ivars[j];

const char* name = ivar_getName(currentMethod);

[instanceArray addObject:NSStringFromSelector(name)];
}

return instanceArray;
}

最佳答案

class_getInstanceVariable 仅返回给定名称的实例变量

您应该使用 Ivar * class_copyIvarList(Class cls, unsigned int *outCount) 来检索类的实例变量。

以下代码打印类中的所有 ivars。

unsigned int count;
Ivar* ivars = class_copyIvarList(cls, &count);
for(unsigned int i = 0; i < count; ++i)
{
NSLog(@"%@::%s", cls, ivar_getName(ivars[i]));
}

关于objective-c - 初始化 'Method *' C 时不兼容的指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com