Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我怎样才能卸下这个包裹?_Ios_Objective C_Localization_Nsbundle - Fatal编程技术网

Ios 我怎样才能卸下这个包裹?

Ios 我怎样才能卸下这个包裹?,ios,objective-c,localization,nsbundle,Ios,Objective C,Localization,Nsbundle,我有一个场景,其中我有要从服务器下载的本地化文件。我在应用程序开始时下载该文件,并将其存储在捆绑包中的文件夹中。比如,如果它的英文文件我将它存储在文件夹'en.lproj'下的bundle中,文件夹名为Localizable.strings 现在,当下载文件时,我使用bundleWithPath:方法加载包。 加载后,我使用方法显示本地化 NSLocalizedStringFromTableInBundle(键,@“Localizable”,bundle,@“”) 在这里,一切正常。 现在,如果

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

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

NSLocalizedStringFromTableInBundle(键,@“Localizable”,bundle,@“”)

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

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

是否有任何方法卸载加载的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设备上,您无法更新应用程序的捆绑包-它是只读的。@rmaddy:它不是主捆绑包。我正在创建一个新包。所以我们可以通过编码来改变它。如果您试图将应用提交到应用商店,您的应用将被苹果拒绝。@DavidCheung:谢谢,大卫。是的,我后来发现了。我的应用被拒绝了。我将我的方法从使用bundle改为使用静态NSDictionary。这对我有帮助。谢谢你,那么你能发布一个更完整的答案吗?谢谢