Сокращение ресурсов приложений по требованию

Я использую локализацию изображений, я хочу использовать концепцию ресурсов по требованию. Я хочу реализовать это таким образом, чтобы, если пользователь выбирает английский язык, приложение отображало изображение, связанное с английским языком, и в настоящее время я хочу, чтобы загружалось только изображение на английском языке, а не изображения на другом языке с использованием ресурсов по запросу. Вот что я пробовал:

    NSSet *tags = [[NSSet alloc] initWithObjects:@"english", @"france", @"italy", nil];
    NSLog(@"tags:%@", tags);

    NSBundleResourceRequest *request = [[NSBundleResourceRequest alloc] initWithTags:tags];

    [request conditionallyBeginAccessingResourcesWithCompletionHandler:^(BOOL resourcesAvailable) {
        if (resourcesAvailable) {

            [self.img setImage:[UIImage imageNamed:NSLocalizedString(@"imageName", nil)]];
        }
        else {

            [request beginAccessingResourcesWithCompletionHandler:^(NSError * _Nullable error) {

                [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                    if(error == nil) {


                        [self.img setImage:[UIImage imageNamed:NSLocalizedString(@"imageName", nil)]];

                    }
                    else {

                        NSLog(@"the error is: %@", error);
                    }

                }];


            }];
        }

    }];
    [request endAccessingResources];

Когда я использую это, все ресурсы загружаются при использовании английского языка в качестве моего языка. Если кто-то может мне помочь, это было бы большим подспорьем.


person Abhilash    schedule 30.07.2015    source источник


Ответы (2)


Вы должны проверить текущий язык пользователя:

NSString* language = [[NSLocale preferredLanguages] objectAtIndex:0];

Затем выберите тег, который хотите загрузить: (теперь по умолчанию английский)

NSString *tagString = @"english";

if( [language isEqualToString:@"fr"] ){
    tagString = @"france";
} else if( [language isEqualToString:@"it"] ){
    tagString = @"italy";
}

NSSet *tags = [[NSSet alloc] initWithObjects:tagString, nil];
person Roland Keesom    schedule 31.07.2015

Вы запрашиваете теги english, france и italy, поэтому вы получаете все ресурсы с тегом english, все ресурсы с тегом france и все ресурсы с тегом italy.

Если вы хотите запросить ресурсы только для одного тега, включите только этот тег в файл NSBundleResourceRequest.

person rickster    schedule 30.07.2015
comment
спасибо за ваш вклад, если не возражаете, можете ли вы сказать мне, как решить эту проблему, я имею в виду, что у меня есть 3 тега, которые я хочу загрузить по одному, как это получить - person Abhilash; 30.07.2015
comment
Если вы хотите загрузить только один тег, запросите только один тег. Посмотрите на свой код — видите, где вы указываете набор из трех тегов? Измените его на набор только одного тега. - person rickster; 30.07.2015