gpt4 book ai didi

ios - 如何卸载 NSBundle?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:02 38 4
gpt4 key购买 nike

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

现在下载文件时,我使用 bundleWithPath: 方法加载包。加载后,我使用方法显示本地化

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

到这里它工作正常。现在,如果文件已从服务器更新,我将再次下载英文文件,并将旧文件替换为新文件。但是应用程序显示了被替换的旧文件的本地化。谁能告诉我我们是否可以重新加载 bundle 以反射(reflect)更新。

在上面的场景中,当文件被更新时,应用程序并没有被终止。如果我终止应用程序并重新启动它,则会反射(reflect)更改。但我希望在不终止应用程序的情况下反射(reflect)更改。

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

最佳答案

得到答案..

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

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
}

关于ios - 如何卸载 NSBundle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32002358/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com