2012-02-07 39 views
0

存储未注册类在我的代码,我动态创建类,并试图将它们存储在一个的NSMutableDictionary:中的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数据结构。

在此先感谢。

回答

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对象。

+0

是的,我想我应该以不同的方式说出我的问题。正如你所说,添加一个类很容易。我想要做的是向数据结构中添加一个未注册的类 - 如果它不是“准备好使用”的事实导致了这个问题,那么我看不到很多选择。 – Jeff 2012-02-07 00:21:07

+1

在obj_registerClassPair给出同样的崩溃之后,你测试了是否将它添加到字典中? – mvds 2012-02-07 00:23:03

+0

是的,代码工作得很好。但是,在注册之前,我需要在dict中的类中添加方法。 – Jeff 2012-02-07 00:30:16