Xcode在构建时更改应用程序文件夹的位置

14

我正在将一个 .mp3 文件存储在我的 iOS 应用程序文档目录中,并将路径保存到 Core Data。但是,当我重新构建应用程序时,Xcode 似乎会将应用程序数据移到另一个目录,从而使存储的路径无效。为什么会发生这种情况,以及保存文件路径的最佳实践是什么?

我正在使用 Xcode 6.2,并且过去已经成功检索该文件。

文件下载后的位置:

in ~/Library/Developer/CoreSimulator/Devices/82D1931C-590D-45A2-AB9B-8D1D4F2530C5/data/Containers/Data/Application/
$ find . -iname p612.mp3
./1C070BF8-0E2E-4EAC-99B6-C56E48675E6E/Documents/adf07cf85254e8f28f942f2d6fa704ae/p612.mp3

重建后文件的位置:

in ~/Library/Developer/CoreSimulator/Devices/82D1931C-590D-45A2-AB9B-8D1D4F2530C5/data/Containers/Data/Application/
$ find . -iname p612.mp3
./E6C7D0AF-E61C-4BDD-AF4B-68C445E2BB0D/Documents/adf07cf85254e8f28f942f2d6fa704ae/p612.mp3

我认为这是iOS8的新功能。请参考此SO问题。解决方案是仅存储文件名,并在读取和保存时查找文档目录URL。 - pbasdf
2个回答

20
自从iOS 8.0以来,每次重建你的代码时,应用程序文件夹(包含文档和库目录)的名称都会更改。这是预期的行为。因此,如果您想存储路径,应只存储文件名,然后动态地将其与文档目录的位置组合在一起。这样,它将始终指向正确的位置。尽管所在的文件夹名称在构建之间会更改,但文档目录的内容将保持不变。
// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

请参见:技术说明 TN2406


你刚刚为我省下了一大堆麻烦! - NRitH

3

更新Swift代码以返回DocumentsDirectory以实现跨构建持久性。该答案将返回Dir的路径。然后,您可以附加文件名/最后一个组件以完成。

func findAppDir()->String{
    let appDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    let path = "file://\(appDir)/"
    return path
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接