如何在字典中存储非对象?

时间:2010-08-26 04:12:07

标签: objective-c

我尝试将选择器(SEL)存储在NSMutableDictionary中并导致崩溃,可能是因为字典试图将其作为对象指针取消引用。在字典中存储非对象的标准方法是什么?

3 个答案:

答案 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)

将它们包裹在物体中。