2015-02-22 5 views
0

Я пытаюсь сохранить, а затем загрузить изображение с диска. Следующие работы на симуляторе, но когда я тестирую устройство, я получаю unexpectedly found nil while unwrapping an Optional value.NSSearchPathForDirectoriesInDomains, работающий на симуляторе, но не на устройстве

Сохранение изображения на диск:

let sketchData: NSData = UIImagePNGRepresentation(sketch) 
let destinationFolder: String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
let sketchPath: String = "\(destinationFolder)\(currentProjectID).png" 
defaults.setObject(sketchPath, forKey: "sketchpath") 
sketchData.writeToFile(sketchPath, atomically: true) 

Загрузка изображения с диска:

let sketchPath: String = defaults.objectForKey("sketchpath") as String 
let image = UIImage(contentsOfFile: sketchPath) 

Вот пример пути. Он идентичен сохранению и загрузке, поэтому проблема не пытается загрузить с другого пути к файлу.

/var/mobile/Containers/Data/Application/72EDBC3D-F9D8-4108-8A64-751A10FF1E71/Documents4.png 

Требуется ли сохранение на самом устройстве другого пути к файлу?

+0

При загрузке изображения вы динамически создаете 'sketchPath'? –

+0

@MidhunMP Я вытаскиваю 'sketchPath' из NSUserDefaults - см. Строки, которые я добавил в свой вопрос. –

ответ

1

Вы просто забыли добавить «/» между папкой и именем файла:

let sketchPath: String = "\(destinationFolder)/\(currentProjectID).png" 

Вы должны использовать stringByAppendingPathComponent и stringByAppendingPathExtension:

let currentProjectID = "Test" 
// you can also use NSFileManager's method URLsForDirectory to find the device's DocumentDirectory 
let destinationFolder = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as NSURL).path! 
let sketchPath = destinationFolder.stringByAppendingPathComponent(currentProjectID).stringByAppendingPathExtension("png")! 

Вы также сохранить его в NSData так что вы следует загрузить его как NSData

let imageData: NSData = UIImagePNGRepresentation(UIImage(data: NSData(contentsOfURL: NSURL(string:"http://i.stack.imgur.com/Xs4RX.jpg")!)!)) 

imageData.writeToFile(sketchPath, atomically: true) 

let loadedImage = UIImage(data: NSData(contentsOfFile: sketchPath)!)!! 
+0

«/» была проблема! Хороший глаз. Я также воспользуюсь вашими другими предложениями, но авария больше не происходит. Любая идея, почему у симулятора не было проблемы? –

+0

Добро пожаловать. Я понятия не имею, что это должно быть проблемой для обоих: возможно, это права на чтение/запись папок –

Смежные вопросы