Mac OS X 10.7.3添加了 - [NSDictionary stringForKey:]方法?

时间:2012-02-10 22:37:41

标签: cocoa osx-lion nsdictionary objective-c-category

我已经得到了我的确认报告,其中一个应用程序的功能之一在10.7.3下打破了。经过调查,似乎10.7.3在-stringForKey:上引入了私有NSDictionary方法。

[NSDictionary respondsToSelector:@selector(stringForKey:)]返回NO,正如人们所期望的那样。

但我在NSDictionary上有一个类别方法来实现-stringForKey:方法,如下所示(因此它也可以用于NSNumberNSDate值)。根据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的变化。

1 个答案:

答案 0 :(得分:2)

您应该始终在框架类上创建的类别方法前缀。毫无疑问。无论10.7.3是否引入了这种方法,你在没有前缀的情况下声明它的事实都是错误的。

顺便说一下,测试[NSDictionary respondsToSelector:@selector(stringForKey:)]并不一定能奏效。 NSDictionary是一个类集群,因此您只是询问抽象超类,而私有方法可能只存在于具体的子类上。