我如何卸载NSBundle?

时间:2015-08-14 04:37:38

标签: ios objective-c localization nsbundle

我有一个场景,我可以从服务器下载本地化文件。我在应用程序启动时下载文件并将其存储在bundle中的文件夹中。就像它的英文文件一样,我将它存储在文件夹'en.lproj'下的文件夹中,名称为 Localizable.strings

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

显示本地化

NSLocalizedStringFromTableInBundle(key,@“Localizable”,bundle,@“”);

直到这里它运作正常。 现在,如果文件从服务器更新,我再次下载英文文件,并用新文件替换旧文件。 但该应用程序显示已替换旧文件的本地化。 任何人都可以告诉我,我们是否可以重新加载捆绑包,以便反映更新。

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

是否有任何方法可以卸载加载的NSBundle?

1 个答案:

答案 0 :(得分:3)

得到答案..

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

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
}