2015-02-22 2 views
8

Я храню .mp3 в каталоге документов приложений iOS и сохраняю путь к Core Data. Когда я перестраиваю приложение, Xcode, похоже, перемещает данные приложения в другой каталог, тем самым делая сохраненный путь недействительным. Почему это происходит и каковы наилучшие методы сохранения путей к файлам?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 
+0

Я думаю, что это ново для iOS8. См. Этот [ВОПРОС] (http://stackoverflow.com/q/26552245/3985749). Решение состоит в том, чтобы хранить только имя файла и искать URL-адрес каталога документов при чтении и сохранении. – pbasdf

ответ

11

С 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.

1

Быстрое обновление для возврата DocumentDirectory для сохранения между сборками. Этот ответ вернет путь к Dir. Затем вы можете добавить имя файла/последний компонент для завершения.

func findAppDir()->String{ 
    let appDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String 
    let path = "file://\(appDir)/" 
    return path 
} 
Смежные вопросы