(id)obj isKindOfClass:抛出错误

aka*_*kyy 1 xcode objective-c subscript automatic-ref-counting

我想在我的自定义类中实现下标,从而实现以下方法:

- (id)objectForKeyedSubscript:(id <NSCopying>)key NS_AVAILABLE(10_8, 6_0);
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key NS_AVAILABLE(10_8, 6_0);
Run Code Online (Sandbox Code Playgroud)

但我有一个奇怪的问题,因为我以前从未见过它:[(id)obj isKindOfClass:]抛出一个ARC语义问题:

没有已知的选择器实例方法'isKindOfClass:'

据我所知,之前我没有遇到任何问题id......这是Xcode的错误(是的,我使用的是Xcode 5 DP2),还是我忘记了重要的事情?

- (id)objectForKeyedSubscript:(id <NSCopying>)key {
    if(![key isKindOfClass:[NSString class]]) { // ERROR
        ...
    } else {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:我不想听到"哦,这是在NDA之下,不应该在这里讨论".我不讨论任何API,功能,等等.我只是让你知道我正在使用测试版软件,所以它可能只是一个简单的bug.

Mar*_*n R 6

isKindOfClass:NSObject 协议的一种方法,因此您可以声明key符合协议

- (id)objectForKeyedSubscript:(id <NSCopying, NSObject> )key { ...
Run Code Online (Sandbox Code Playgroud)

或要求key衍生自NSObject(符合该协议):

- (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key { ...
Run Code Online (Sandbox Code Playgroud)