我有一个未本地化的运送应用程序,在主项目目录中有foo.xib。为了准备本地化,我把它移到了en.lproj / foo.xib。现在,当我构建我的应用程序并在我的测试设备上安装时,它最终使用旧的foo.nib,它必须在那之前(安装过程不能删除应用程序包中的旧文件)。从测试设备中删除应用程序并重新安装修复它 - 但我不希望现有客户必须这样做。
其中一些来自对UIViewController的-initWithNibName:bundle方法的调用(我目前正在为nibBundle传递nil)。我可以在这里创建一个NSBundle实例,它指向正确的本地化目录。其他在Info.plist或界面构建器的“NIB名称”部分中指定,我没有看到为这些指定包的方法。
将我的所有xib重命名为(例如)en.lproj / newfoo.xib可能更容易,然后我认为它会在运行时找到正确的nib。 (而且我必须记住在新版本中再也不会使用旧的“foo.xib”名称。)这里有更聪明的解决方案吗? (除了回到过去并从头开始使用en.lproj目录; - )
谢谢! -Mike
答案 0 :(得分:4)
回答我自己的问题以防其他人遇到此问题。看来这是Xcode构建发布周期的工件,当用户通过App Store升级时,这不是问题。我继续发布我的更新,没有人注意到过时资源会导致的问题。
作为开发的加速,看起来Xcode只复制它在您构建并安装到模拟器或测试设备时检测到的已更改的资源。 (为了防止每次构建和测试时必须重新复制具有500MB资源的游戏。)当您(重新)从项目中移动资源时,它不会检测到这一点并且(重新)移动旧的副本。我将向Apple提交一个关于它的错误。
但是,App Store似乎每次升级时都会进行全新安装(复制用户的文档目录),因此这不是App Store的问题。我不确定在向beta测试人员发送.ipa文件时是否存在问题。
答案 1 :(得分:0)
我遇到了同样的问题。问题是手机会保留笔尖的缓存。因此,需要清除缓存以便您查看新的本地化nib。我也不希望我的用户必须删除应用程序,因为它存储数据。
答案 2 :(得分:0)
我遇到了同样的问题,但找到了一个有效的解决方案,即使Xcode的部署有点奇怪:Prevent UIViewController loading stale XIB from app bundle