cocoa - Mac OS X 10.7.3 添加 -[NSDictionary stringForKey :] method?

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

我收到了经我确认的报告,我的一个应用程序中的一项功能在 10.7.3 下出现故障。经过调查,10.7.3 似乎在 NSDictionary 上引入了一个私有(private)的 -stringForKey: 方法。

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

但是我在 NSDictionary 上有一个类别方法来实现 -stringForKey: 方法,如下所示(因此它可以用于 NSNumber以及 NSDate 值)。在 10.7.2 及更早版本下,它工作正常;在 10.7.3 下,它返回 nil。直接获取对象和描述效果很好。所以这一定是类别冲突。

- (NSString *)stringForKey:(id)key;
{
    return [[self objectForKey:key] description];
}

我想这是支持为类别方法添加前缀的另一个论据,尽管 advice I got from an Apple Application Frameworks Evangelist .

其他人可以证实这一点吗?我不认为这是第三方应用程序的冲突;我认为这是 10.7.3 中的更改。

最佳答案

您应该始终为您在框架类上创建的类别方法添加前缀。毫无疑问。无论 10.7.3 是否引入了此方法,您在声明时不带前缀的事实都是错误的。

顺便说一句,测试 [NSDictionary respondsToSelector:@selector(stringForKey:)] 不一定有效。 NSDictionary 是一个类簇,因此您只需询问抽象父类(super class),而私有(private)方法可能只存在于具体子类上。

关于cocoa - Mac OS X 10.7.3 添加 -[NSDictionary stringForKey :] method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235790/

相关文章:

cocoa - 流畅的滑动和滚动 10.7 风格

iphone - 我需要将两个 NSArray/NSDictionaries 组合在一起

json - 尝试从 NSDictionary (JSON) 打印 NSString 时出错

xcode - macOS NSExtensionMainStoryboard 无法加载

objective-c - 在 Mountain Lion 中将 libFlac 与 Xcode 结合使用

python - 谷歌应用引擎在 OSX Lion 上使用 python 失败

vim - "M-"iTerm2/Terminal 上 vim 中的绑定(bind)不起作用

c++ - C++有没有类似于Objective-C的NSDictionary的字典?

cocoa - 非基于文档的 Cocoa 应用程序中的多个窗口

cocoa - 显示系统键盘 Mac 应用程序?