Objective c 在NSMutableDictionary中存储未注册的类

Objective c 在NSMutableDictionary中存储未注册的类,objective-c,runtime,nsdictionary,nsmutabledictionary,Objective C,Runtime,Nsdictionary,Nsmutabledictionary,在我的代码中,我动态创建类,并尝试将它们存储在NSMutableDictionary中: NSMutableDictionary* classDict = [ [ NSMutableDictionary alloc ] init ]; ...start loop Class customClass = objc_allocateClassPair( [ TestClass class ], className, 0 ); [ classDict setObject:customClas

在我的代码中,我动态创建类,并尝试将它们存储在NSMutableDictionary中:

NSMutableDictionary* classDict = [ [ NSMutableDictionary alloc ] init ];  

...start loop

Class customClass = objc_allocateClassPair( [ TestClass class ], className, 0 );

[ classDict setObject:customClass forKey:name ]

...end loop

...add methods to certain classes within the dict

...register classes with objective c
当我运行代码时,当它试图将类添加到字典中时,会抛出一个“EXC_BAD_ACCESS”。有没有办法绕过这个问题?也就是说,有没有办法将未注册的类添加到NSMutableDictionary?另一种解决方案是使用std:map数据结构


提前感谢。

要回答实际问题:向字典添加
对象很简单:

[dict setObject:[TestClass class] forKey:@"key"];
我经常这样做,没有任何问题。但是,您似乎想要添加一个未完成的类对象。文件规定:

构建完类后,调用objc_registerClassPair。这个 新类现在可以使用了

那么,您的
对象可能还没有“准备好使用”吗

在一些测试后更新

您需要调用
objc\u registerClassPair
,以便将
Class
用作实际对象。在此时间之前调用
retain
将导致
EXC\u BAD\u访问

如果要在循环中创建类,并在以后的阶段中注册它们,只需使用以下命令框住指针:

[classDict setObject:[NSValue valueWithPointer:customClass] forKey:name];

只需使用
classcustomclass=[value pointerValue]将其取消装箱。注册后,您当然可以像往常一样使用
对象。

回答实际问题:将
对象添加到词典很简单:

[dict setObject:[TestClass class] forKey:@"key"];
我经常这样做,没有任何问题。但是,您似乎想要添加一个未完成的类对象。文件规定:

构建完类后,调用objc_registerClassPair。这个 新类现在可以使用了

那么,您的
对象可能还没有“准备好使用”吗

在一些测试后更新

您需要调用
objc\u registerClassPair
,以便将
Class
用作实际对象。在此时间之前调用
retain
将导致
EXC\u BAD\u访问

如果要在循环中创建类,并在以后的阶段中注册它们,只需使用以下命令框住指针:

[classDict setObject:[NSValue valueWithPointer:customClass] forKey:name];

只需使用
classcustomclass=[value pointerValue]将其取消装箱。注册后,您当然可以像往常一样使用
对象。

是的,我想我应该用不同的措辞来回答我的问题。正如您所说,添加一个类很容易。我想做的是将一个未注册的类添加到数据结构中——如果它没有“准备好使用”这一事实导致了问题,那么我看不到很多选项。您是否测试了在
obj_registerClassPair
之后将其添加到字典中是否会导致相同的崩溃?是的,代码工作正常。然而,我需要在dict中的类注册之前向它们添加方法。显然,在调用objc_registerClassPair之后,您可以动态地向类添加方法。我的印象是,这个类一旦注册就变得不可更改了。这解决了我的问题。:)嗯,你总是可以保存指向未完成对象的指针,请参阅我的更新。是的,我想我应该用不同的措辞来回答我的问题。正如您所说,添加一个类很容易。我想做的是将一个未注册的类添加到数据结构中——如果它没有“准备好使用”这一事实导致了问题,那么我看不到很多选项。您是否测试了在
obj_registerClassPair
之后将其添加到字典中是否会导致相同的崩溃?是的,代码工作正常。然而,我需要在dict中的类注册之前向它们添加方法。显然,在调用objc_registerClassPair之后,您可以动态地向类添加方法。我的印象是,这个类一旦注册就变得不可更改了。这解决了我的问题。:)好的,您可以随时保存指向未完成对象的指针,请参阅我的更新。