gpt4 book ai didi

ios - 使用 object_setIvar 时出现 EXC_BAD_ACCESS

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:05 25 4
gpt4 key购买 nike

我正在尝试在我使用下面的代码分配的运行时类上添加和设置 Ivars。我对 Objective-C 运行时函数没有任何经验,这就是我尝试学习的原因。

    if ([object isKindOfClass:[NSDictionary class]])
{
const char *className = [aName cStringUsingEncoding:NSASCIIStringEncoding];

// Allocate the class using the class name, NSObject metaclass, and a size of 0
Class objectClass = objc_allocateClassPair([NSObject class], className, 0);

// Get all of the keys in the dictionary to use as Ivars
NSDictionary *dictionaryObject = (NSDictionary *)object;
NSArray *dictionaryObjectKeys = [dictionaryObject allKeys];

for (NSString *key in dictionaryObjectKeys)
{
// Convert the NSString to a C string
const char *iVarName = [key cStringUsingEncoding:NSASCIIStringEncoding];

// Add the Ivar to the class created above using the key as the name
if (class_addIvar(objectClass, iVarName, sizeof(NSString*), log2(sizeof(NSString*)), @encode(NSString*)))
{
// Get the newly create Ivar from the class created above using the key as the name
Ivar ivar = class_getInstanceVariable(objectClass, iVarName);

// Set the newly created Ivar to the value of the key
id value = dictionaryObject[key];
object_setIvar(objectClass, ivar, [value copy]);
}
}

objc_registerClassPair(objectClass);
}

每次我运行上面的代码时,我都会在行 object_setIvar(objectClass, ivar, [value copy]); 上收到 EXC_BAD_ACCESS (code=2, address = 0x10) 错误。我不明白为什么会收到此错误。在尝试设置 Ivar 的值之前,我检查了 Ivar 是否已成功添加到类中,但显然 Ivar 为零。我试过对 ivar 进行 NSLog,但我得到了同样的错误。

我尝试在 Google 上搜索解决方案,但找不到关于 objective-c 运行时函数的太多信息。

我正在使用 ARC 并在 iOS 模拟器上运行该应用。

最佳答案

您不能为 上的实例变量设置值。创建并注册类后,您可以创建该类的实例:

id myInstance = [[objectClass alloc] init];

然后为该对象的实例变量设置值:

for (NSString *key in dictionaryObjectKeys)
{
const char *iVarName = [key cStringUsingEncoding:NSASCIIStringEncoding];

id value = dictionaryObject[key];
Ivar ivar = class_getInstanceVariable(objectClass, iVarName);

object_setIvar(myInstance, ivar, [value copy]);
}

关于ios - 使用 object_setIvar 时出现 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306797/

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