Как я могу выгрузить NSBundle?

У меня есть сценарий, в котором у меня есть файлы локализации для загрузки с сервера. Я загружаю файл при запуске приложения и сохраняю его в папке в комплекте. Например, если его английский файл, я храню его в связке в папке 'en.lproj' с именем Localizable.strings.

Теперь, когда файл загружен, я загружаю пакет, используя метод bundleWithPath:. После загрузки я показываю локализацию, используя метод

NSLocalizedStringFromTableInBundle(key, @"Localizable", bundle, @"");

Пока здесь все работает нормально. Теперь, если файл обновляется с сервера, я снова скачиваю файл на английском языке и заменяю старый файл новым. Но приложение показывает локализацию из старого файла, который был заменен. Может кто-нибудь, пожалуйста, скажите мне, если мы можем перезагрузить пакет снова, чтобы обновления были отражены.

In the above scenario the application is not killed when file is updated. If I kill the application and restart it then the changes are reflected. But I want the changes to be reflected without killing the application.

Is there any method to unload the loaded NSBundle?

1 ответ

Получил ответ..

Этот код помог. Это используется для очистки загруженного пакета из кэша.

BOOL FlushBundleCache(NSBundle *prefBundle) {
    // Before calling the function, we need to check if it exists
    // since it was weak-linked.
    if (_CFBundleFlushBundleCaches != NULL) {
        NSLog(@"Flushing bundle cache with _CFBundleFlushBundleCaches");
        CFBundleRef cfBundle =
        CFBundleCreate(nil, (CFURLRef)[prefBundle bundleURL]);
        _CFBundleFlushBundleCaches(cfBundle);
        CFRelease(cfBundle);
        return YES; // Success
    }
    return NO; // Not available
}
Другие вопросы по тегам