2015-03-08 5 views
0

У меня есть приложение, звук магнитофона, где записанные звуки сохраняются, как это:Swift - Сохранение данных в каталоге с использованием NSSearchPathForDirectoriesInDomains, но каталог всегда изменяется?

let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0] as String 
    var pathArray = [dirPath, recordingName] 
    let filePath = NSURL.fileURLWithPathComponents(pathArray) 

Все путь к файлу URL, которые хранятся в массиве (введен в NSUserDefaults) для легкого доступа.

Я могу воспроизводить файлы, если они воспроизводятся в том же режиме, что и при их записи, но открытие и закрытие резервной копии симулятора приведет к неправильному пути к файлу (поскольку папка приложения-id в ~/Библиотека/Разработчик/CoreSimulator/Devices/Device-ID/data/Container/Data/Application/app-id-folder /Documents/filename.wav изменит имя). Как я могу изменить массив, содержащий URL-адрес файла, для обновления имени папки приложения-id при каждом запуске приложения? (в настоящее время это всего лишь массив строк, которые при необходимости преобразуются в тип NSURL). Или даже проще, можно ли сохранить в домашний каталог пользователей или где-нибудь, где вам не нужно заниматься сменой имен папок?

+0

Почему бы вам не просто перечислить файлы папок документов? –

+0

как это сделать? – ZhouW

+1

Вы не должны хранить полный путь в 'NSUserDefaults'. Просто сохраните относительный каталог в папке документов, а затем во время выполнения добавьте этот относительный путь к пути, основанному на 'NSSearchPathForDirectoriesInDomains'. – Rob

ответ

3

Я решил это, создав массив NSUserDefaults только имена файлов (например, [audio1.wav, audio2.wav]) и вызвав NSSearchPathForDirectoriesInDomains для каждой новой viewdidload, а затем объединив их в новую строку. Например, этот код будет вызывать второй звуковой файл в массиве:

let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0] as String 
var filesNamesWithWav = defaults?.objectForKey("filesNamesWithWav") as NSArray 
var newpath = "\(dirPath)/" + "\(filesNamesWithWav[1])" 
+0

var newpath = dirPath.stringByAppendingPathComponent (filesNamesWithWav [1]) –

+0

приведет ли мой код к проблемам, а не к stringByAppendingPathComponent? Или это просто сделать его чище? – ZhouW

+0

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html#//apple_ref/occ/instm/NSUserDefaults/stringArrayForKey: –