我已经得到了我的确认报告,其中一个应用程序的功能之一在10.7.3下打破了。经过调查,似乎10.7.3在-stringForKey:
上引入了私有NSDictionary
方法。
[NSDictionary respondsToSelector:@selector(stringForKey:)]
返回NO,正如人们所期望的那样。
但我在NSDictionary
上有一个类别方法来实现-stringForKey:
方法,如下所示(因此它也可以用于NSNumber
和NSDate
值)。根据10.7.2及更早版本,它运作良好;根据10.7.3,它返回零。直接获取对象和描述可以正常工作。所以它必须是一个类别冲突。
- (NSString *)stringForKey:(id)key;
{
return [[self objectForKey:key] description];
}
我想这是支持类别方法前缀的另一个论点,尽管advice I got from an Apple Application Frameworks Evangelist。
其他人可以证实吗?我不认为这是第三方应用程序冲突;我认为这是10.7.3的变化。
答案 0 :(得分:2)
您应该始终在框架类上创建的类别方法前缀。毫无疑问。无论10.7.3是否引入了这种方法,你在没有前缀的情况下声明它的事实都是错误的。
顺便说一下,测试[NSDictionary respondsToSelector:@selector(stringForKey:)]
并不一定能奏效。 NSDictionary
是一个类集群,因此您只是询问抽象超类,而私有方法可能只存在于具体的子类上。