我在应用程序商店中有一个应用程序,它使用Core Data来保存大部分数据。 例外是存储图像。我将图像存储在子目录中的Documents目录中,并将NSURL引用存储在核心数据存储中相应的对象属性中。
我们注意到,当更新进入应用程序商店时,找不到这些图像,因此不会使用与先前版本的应用程序一起存储的引用来显示这些图像。 现在,我怀疑问题是,因为我们使用开发设备进行测试,所以这个问题会传播,因为dev应用程序使用的Applications目录中的Directory与App store正在创建/使用的目录不同。我注意到应用程序中App的App Store目录与Xcode中调试版本时创建的App Store目录之间存在差异。 因此,存储在核心数据中的URL指向错误的应用程序文件夹。 这有点难以调试,因为一旦新版本在商店发布,我就无法下载旧的应用版本。
所以我有几个问题。我是否可以保证下载同一应用程序版本的人员所在的Applications子目录是相同的,这使得非开发设备不会出现问题?
我应该存储相对图片网址或字符串来表示这些资源的位置,还是应该可以存储最终为绝对网址的内容?
非常感谢, 菲利普
答案 0 :(得分:13)
您应该使用相对URL来存储对文件的引用。应用更新后,绝对URL可能会更改
在应用更新期间保存的文件
当用户下载应用更新时, iTunes将更新安装在新的app目录中。它然后移动 用户从旧安装到新应用程序的数据文件 删除旧安装之前的目录。文件如下 保证在更新过程中保留目录:
- APPLICATION_HOME /文件
- Application_Home / Library
虽然是文件 在其他用户目录中也可以移动,你不应该依赖 他们在更新后出现。
Thx到沙箱,应用程序主页也是用户主页。因此可以使用unix tilde,它是用户家的简写,即~/Documents
,~/Library
等等。
使用-[NSString stringByAbbreviatingWithTildeInPath]
将完整路径转换为相对路径。并用-[NSString stringByExpandingTildeInPath]
反转它。
答案 1 :(得分:0)
我认为您正在寻找的是以下内容:
NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];