代码之家  ›  专栏  ›  技术社区  ›  airportyh

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

  •  4
  • airportyh  · 技术社区  · 15 年前

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   spbfox    15 年前

    将它们包装成对象。

        2
  •  15
  •   dreamlax    15 年前

    您可以将选择器转换为 NSString 使用 NSStringFromSelector() 你可以用另一种方式 NSSelectorFromString() .

    SEL aSel = @selector(takeThis:andThat:);
    
    [myDict setObject:NSStringFromSelector(aSel) forKey:someKey];
    
    SEL original = NSSelectorFromString([myDict objectForKey:someKey]);
    
        3
  •  2
  •   Sven    15 年前

    尝试使用 NSMapTable 使用nsObjectmapKeyCallbacks和nsNonOwnedPointermapValueCallbacks。这类似于NSmutableDictionary,但允许任何指针作为值,而不仅仅是对象。

    您还可以将选择器存储在nsInvocation对象中,并将其与常规字典一起使用。如果需要存储的内容超过选择器(目标、参数等),这可能是更好的解决方案。