我想在我的自定义类中实现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。
答案 0 :(得分:6)
isKindOfClass:
是NSObject
协议的一种方法,因此您可以
声明key
符合协议
- (id)objectForKeyedSubscript:(id <NSCopying, NSObject> )key { ...
或要求key
派生自NSObject
(符合该协议):
- (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key { ...