关于ios:如何卸载NSBundle?

How can I unload NSBundle?

我有一个场景,我需要从服务器下载本地化文件。我在应用程序开始时下载文件并将其存储在捆绑文件夹中。就像它的英文文件一样,我将它存储在文件夹 \\'en.lproj\\' 下的包中,名称为 Localizable.strings。

现在下载文件时,我使用 bundleWithPath: 方法加载包。
加载后,我使用 method

显示本地化

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

直到这里它工作正常。
现在,如果文件是从服务器更新的,我会再次下载英文文件,然后用新文件替换旧文件。
但是该应用程序显示了被替换的旧文件的本地化。
谁能告诉我我们是否可以再次重新加载包以反映更新。

在上述情况下,更新文件时应用程序不会被终止。
如果我终止应用程序并重新启动它,则会反映更改。
但我希望在不终止应用程序的情况下反映更改。

有没有什么方法可以卸载已加载的NSBundle?


得到了答案..

这段代码有帮助。这用于从缓存中刷新加载的包。

1
2
3
4
5
6
7
8
9
10
11
12
13
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
}