objective-c - 静态 NSLocalizedString

标签 objective-c cocoa nslocalizedstring

在检查了很多主题之后,我仍然想不通:使用静态 NSLocalizedString 的(最好的?)方法是什么,即静态分配 NSLocalizedString 并轻松访问它。

理想情况下,我想做类似的事情(不会编译,带有 Initializer element is not a compile-time constant 错误):

 //Somewhere in my header
 static NSString* mystring = NSLocalizedString(@"min", nil); //Error : "Initializer element is not a compile-time constant"

 @implementation myClass
 (NSString*)aMethod
{
    return myString;
}
@end

我知道 NSLocalizedString 是由
#define NSLocalizedString(key, comment) 定义的宏\ [[NSBundle mainBundle] localizedStringForKey:(key) value:@""table:nil],
但这并没有多大帮助:S。

为什么?

长话短说,以防止在文档的多个部分中多次定义相同的字符串(这将防止在我的整个应用程序中进行一次编辑)。

考虑这个例子,其中定义的冗余是非常明确的:

//MyDelegate.h
@property IBoutlet NSTextField* myTextField;

//MyDelegate.m
@implementation MyDelegate.m
@synthetize myTextField;
-(void)setTextFieldToDefaultValue
{
    [myTextField setStringValue:NSLocalizedString(@"Name",@"This field is used to write one's name");
}
-(BOOL)isTextFieldStringDefault:(NSString*)myString
{
    return [[myTextField stringValue] isEqual:NSLocalizedString(@"Name",@"This field is used to write one's name")];
}
@end

当然,它在一个非常密集和大的项目中更有意义,在这个项目中字符串将用于不同的方法,并且在您使用大量相似的本地化字符串的上下文中。

最佳答案

通常这都应该在你的实现文件中:

static NSString* myString = nil;

@implementation myClass

+ (void)initialize
{
    myString = NSLocalizedString(@"min", nil);
}

- (NSString *)aMethod
{
    return myString;
}

@end

关于objective-c - 静态 NSLocalizedString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379163/

相关文章:

macos - NSButton 中的 NSProgressIndicator

ios - 根据控件的宽度缩放 UISegmentedControl 标签

objective-c - 'MySwiftClass' 没有可见的@interface 声明选择器 'addX:andY'

objective-c - 更改 UIImageView 的前面位置

cocoa - 如何在 Mac OSX 中模拟 ctrl+up?

iphone - 如何确保我的应用永远不会成为 "Open In..."的默认应用

string - 带有变量的 NSLocalizedString 对我不起作用

ios - NSLocalizedString 的宏不起作用

ios - UIPickerView 没有选择正确的行

objective-c - 如何创建 NSScrollWheel 类型的 NSEvent?