Как я могу выгрузить 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
}