【问题标题】:Xcode changes location of applications folder on buildXcode 在构建时更改应用程序文件夹的位置
【发布时间】:2015-04-23 13:02:47
【问题描述】:

我在我的 iOS 应用程序文档目录中存储了一个 .mp3 文件,并保存了 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 Question。解决方法是只存储文件名,读取和保存时查找Documents目录URL。

标签: ios xcode core-data filesystems ios-simulator


【解决方案1】:

iOS 8.0 开始,每次重建代码时,应用程序文件夹的名称(包含您的文档和库目录)都会更改。这是预期的行为。

所以如果你想存储一个路径,你应该只存储文件名,然后将它与文件目录的位置结合起来。这样,它将始终指向正确的位置。

文档目录的内容将保持不变,即使它所在的文件夹的名称会随着版本的变化而变化。

// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

请参阅:Technical Note TN2406

【讨论】:

  • 你帮我省了很多麻烦!
【解决方案2】:

用于返回 DocumentsDirectory 以在构建之间保持持久性的 Swift 更新。这个答案将返回目录的路径。然后您可以附加文件名/最后一个组件来完成。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多