在我的代码中,我正在动态创建类,并尝试将它们存储在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数据结构。
提前致谢。
答案 0 :(得分:4)
回答实际问题:将Class
对象添加到字典很简单:
[dict setObject:[TestClass class] forKey:@"key"];
我经常这样做,没有任何问题。但是,您似乎想要添加未完成的类对象。文档说明:
完成构建课程后,请调用objc_registerClassPair。该 新课程现在可以使用了。
那么也许你的Class
对象还没有“准备好使用”了吗?
更新:
您需要调用objc_registerClassPair
才能将Class
用作实际对象。在此时间之前致电retain
将导致EXC_BAD_ACCESS
。
如果你想在一个循环中创建类,并在稍后阶段注册它们,只需使用以下方法打包指针:
[classDict setObject:[NSValue valueWithPointer:customClass] forKey:name];
只需使用Class customClass = [value pointerValue];
取消装箱即可。注册后,您可以照常使用Class
个对象。