我尝试将选择器(SEL)存储在NSMutableDictionary中并导致崩溃,可能是因为字典试图将其作为对象指针取消引用。在字典中存储非对象的标准方法是什么?
答案 0 :(得分:15)
您可以使用NSStringFromSelector()
将选择器转换为NSString
,然后您可以使用NSSelectorFromString()
返回其他方式。
SEL aSel = @selector(takeThis:andThat:);
[myDict setObject:NSStringFromSelector(aSel) forKey:someKey];
SEL original = NSSelectorFromString([myDict objectForKey:someKey]);
答案 1 :(得分:2)
尝试使用带有NSObjectMapKeyCallBacks和NSNonOwnedPointerMapValueCallBacks的NSMapTable。这类似于NSMutableDictionary,但允许任何指针作为值,而不仅仅是对象。
您还可以将选择器存储在NSInvocation对象中,并将其与常规字典一起使用。如果您需要存储多于Selector(目标,参数等),这可能是更好的解决方案。
答案 2 :(得分:1)
将它们包裹在物体中。