2

我在NSLocale数字或货币格式中使用了很多。例如我这样使用它:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
// Config the NSNumberFormatter ...
formatter.groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];

编译器总是给我警告:Multiple methods named 'objectForKey:' found

这在大型项目中真的很烦人(这种类型的警告有 20 多个)。我发现摆脱此警告的唯一方法是将类型转换为NSDictionary

formatter.groupingSeparator = [(NSDictionary *)[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];

这可行,但我不确定这是否会导致问题,因为[NSLocale currentLocale]似乎不直接是NSDictionary[[NSLocale currentLocale] class]返回__NSCFLocale)。

有没有更好的解决方案?

4

1 回答 1

3

CMD+点击你的objectForKey声明。Xcode 将在 NSDictionary.h 中找到该方法。

现在更改您的代码

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
...
NSLocale *currentLocale = [NSLocale currentLocale];
formatter.groupingSeparator = [currentLocale objectForKey:NSLocaleGroupingSeparator];

和 CMD+Click 再次到这个objectForKey语句。Xcode 将转到正确的位置,NSLocale.h。

或者,正如您所建议的,您可以强制转换 NSLocale 之类的

formatter.groupingSeparator = [(NSLocale *)[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];
于 2013-07-24T09:55:00.280 回答