1、怎么在NSDIctionary中存放@selector:
在iPhone中,Selector类型的定义是:
typedef struct objc_selector *SEL;
可见它本质上是一种指针。而NSDictionary存储的对象应该源自NSObject的对象。直接将SEL类型的值存放到NSDictionary中显然不大可能。在这种情况下,通常有两种做法:一是存放字符串,然后通过NSSelectorFromString从字符串得到SEL。第二种做法就是需要对SEL进行“打包”后存放到NSDictionary,获取时就进行相应的“解包”操作就可以了。本文关注第二种实现,其中存放和获取的代码分别如下:
// 存放Selector
SEL inSelector = @selector(sayHello:);
NSValue *selectorAsValue = [NSValue valueWithBytes:&inSelector objCType:@encode(SEL)];
id dict = [NSMutableDictionary dictionaryWithCapacity:3];
[dict setObject:selectorAsValue forKey:@"action"];
// 获取Selector
SEL outSelector;
[(NSValue *)[dict objectForKey:@"action"] getValue:&outSelector];
[self performSelector:outSelector withObject:@"…"];
出现警告的原因:http://www.tuicool.com/articles/iu6zuu
2、xib上使用了自定义控件时:
1)将xib上的控件的custom class修改成自定义控件类的类名
2)xib加载的控件的初始化方法为: