(id)obj isKindOfClass:抛出错误

时间:2013-07-02 20:43:21

标签: objective-c xcode automatic-ref-counting subscript

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

- (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);

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

  

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

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

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

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

1 个答案:

答案 0 :(得分:6)

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

- (id)objectForKeyedSubscript:(id <NSCopying, NSObject> )key { ...

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

- (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key { ...