KON*_*ONG 17 iphone objective-c
我想在字典中添加一个选择器(主要目的是在完成某些操作后识别回调方法和委托)
但我发现我不能这样做,程序会收到错误"EXC_BAD_ACCESS".有没有其他方法可以将该方法选择器添加到字典中?谢谢你的帮助.
小智 36
我知道很久以前这个问题得到了回答,但万一有人会像我一样偶然发现它...
的组合NSStringFromSelector
与NSSelectorFromString
如上回答可能是最好的一段路要走.但是如果你真的想要,你可以使用选择器作为一个值或键NSDictionary
.
选择器(类型SEL
)实现为指向Apple的Objective-C运行时中的结构的指针.指针不能直接在字典中使用,但指针可以包装在NSValue
可以使用的对象中.
使用此方法,您可以使用以下代码将选择器作为值存储在字典中:
dictionary = [NSDictionary dictionaryWithObject:[NSValue valueWithPointer:selector] forKey:key];
可以使用以下代码检索选择器:
SEL selector = [[dictionary objectForKey:key] pointerValue];
类似地,使用选择器作为键:
dictionary = [NSDictionary dictionaryWithObject:value forKey:[NSValue valueWithPointer:selector]]; value = [dictionary objectForKey:[NSValue valueWithPointer:selector]];
Ste*_*ton 22
向字典添加新条目会做两件事(除了将其添加到字典中,显然):
NSCopying
协议retain
价值.这意味着它需要实现NSObject
协议这可能是导致你的第二个问题EXC_BAD_ACCESS
.
至少有两种解决方法.
首先,您可以将实现选择器的类的实例添加到字典中,而不是添加选择器.通常你的班级将继承NSObject
,它将正常工作.请注意,它会保留该类,但可能不是您想要的.
其次,您可以使用NSSelectorFromString
和NSStringFromSelector
(文档在这里)将选择器转换为字符串(然后再返回).
归档时间: |
|
查看次数: |
7123 次 |
最近记录: |