无法在NSDictionary中使用"class"作为键

Viv*_*ath 19 class objective-c nsdictionary

我正在尝试使用一个类作为一个关键NSDictionary.我看了这个问题的答案,我所拥有的几乎是一样的; 我正在使用setObject: forKey:.然而,XCode抱怨说Incompatible pointer types sending 'Class' to parameter of type 'id<NSCopying>'.我的电话是:

[_bugTypeToSerializerDictionary setObject: bugToStringSerializer 
                                forKey: [bugToStringSerializer serializedObjectType]];
Run Code Online (Sandbox Code Playgroud)

bugToStringSerializerBugToStringSerializer具体实现的实例serializedObjectType.具体实现的示例如下所示:

- (Class) serializedObjectType {
    return [InfectableBug class];
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

小智 35

(看来类不符合NSCopying,但是他们的类型不是id <NSCopying>.)编辑:类不符合协议.当然,重要的是类响应copycopyWithZone:消息(这就是为什么你可以安全地忽略这种情况下的警告).他们的类型仍然没有id <NSCopying>.)这就是编译器抱怨的原因.

如果你真的不想要那个丑陋的警告,只需执行一个显式的类型转换:

[dictionary setObject:object forKey:(id <NSCopying>)someClass];
Run Code Online (Sandbox Code Playgroud)

  • ... @VivinPaliath在ios6中我的编译器将其视为错误. - = ||| (2认同)

Sve*_*Tan 19

啊哈,我刚刚解决了项目中的错误.

用这个:

NSStringFromClass([Someclass class]);
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么这会被投票,这与NSClassFromString()配对时是一个非常合适的例子; (9认同)