Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSLocalizedString的宏不工作_Ios_Objective C_Macros_Nslocalizedstring - Fatal编程技术网

Ios NSLocalizedString的宏不工作

Ios NSLocalizedString的宏不工作,ios,objective-c,macros,nslocalizedstring,Ios,Objective C,Macros,Nslocalizedstring,我在Prefix.pch中为NSLocalizedString构建了一个宏,如下所示: #undef NSLocalizedString #define NSLocalizedString(key,_comment) [[LocalizedText sharedInstance] localizedStringFor:key] 我的LocalizedText类如下所示: + (LocalizedText *)sharedInstance { @synchronized(self)

我在Prefix.pch中为NSLocalizedString构建了一个宏,如下所示:

#undef NSLocalizedString
#define NSLocalizedString(key,_comment) [[LocalizedText sharedInstance] localizedStringFor:key]
我的LocalizedText类如下所示:

+ (LocalizedText *)sharedInstance {
    @synchronized(self)
    {
        if (_singletonInstance == nil)
            _singletonInstance = [[LocalizedText alloc] init];
    }

    return _singletonInstance;
}

- (NSString *) localizedStringFor:(NSString*) key
{

    NSUserDefaults *deviceLanguage = [NSUserDefaults standardUserDefaults];

   NSString *currentLanguage = [deviceLanguage objectForKey:@"deviceLanguage"];

    NSString *path;
    if([currentLanguage isEqual: @"en"])
        path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
    else if([currentLanguage isEqual: @"de"])
        path = [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
    else if([currentLanguage isEqual: @"it"])
        path = [[NSBundle mainBundle] pathForResource:@"it" ofType:@"lproj"];


    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];

    return str;

}

例如,当我将NSUserDefaults更改为@en时,我希望每个NSLocalizedString都能为我提供正确的英语翻译,但它从未更改,始终是默认语言。我的代码有什么问题?

在调试宏之前,我会设置一个测试,如下所示:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *currentLanguage = [defaults objectForKey:@"deviceLanguage"];

NSString *key = @"SomeKeyFromYourLocalizedFile";
NSString *localized = [[LocalizedText sharedInstance] localizedStringFor:key];
NSLog(@"%@: %@", currentLanguage, localized);

[defaults setObject:@"de" forKey:@"deviceLanguage"];
[defaults synchronize];
NSString *localized = [[LocalizedText sharedInstance] localizedStringFor:key];
NSLog(@"%@: %@", currentLanguage, localized);

[defaults setObject:@"it" forKey:@"deviceLanguage"];
[defaults synchronize];
NSString *localized = [[LocalizedText sharedInstance] localizedStringFor:key];
NSLog(@"%@: %@", currentLanguage, localized);
看看它的输出。你的虫子可能在那里的某个地方

我期望:

en: English localized
de: German localized
it: Italian localized
在那之后,您只需使用宏,看起来它将像那样工作。我试过:

#ifdef NSLocalizedString
#undef NSLocalizedString
#endif
#define NSLocalizedString(key, comment) NSLog(@"Output %@, %@", key, comment)

NSLocalizedString(@"First", @"Second");
其结果是:
2017-01-12 14:31:31.501应用程序[49000:50650596]输出第一,第二

谢谢你的帮助,[[LocalizedText-sharedInstance]localizedStringFor:key]似乎工作得很好,但当我尝试使用宏时,函数没有被调用,所以它本身似乎有问题。这很奇怪!我也试过同样的方法,但确实有效。请查看更新的答案。