2017-09-11 4 views
0

내가 파일을 다운로드 및 문서 디렉토리에 쓰고 싶어하지만 난 simulator에서 실행할 경우, 그것은 다음과 같은 오류를 반환 문서 디렉토리에 파일을 작성 실패 :스위프트 3 :

오류 도메인 = NSCocoaErrorDomain 코드 = 4 ""logo.jpg "폴더가 존재하지 않습니다."

나는 다음과 같은 코드를 작성하며 틀린 부분이 있습니까? 감사.

var absPath = "./image/logo.png" 
var sourceUrl = "http://www.example.com/data/" 
var documentUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] as URL     
let strIdx = absPath.index(absPath.startIndex, offsetBy: 2) 

if (absPath.hasPrefix("./")) 
{ 
    absPath = absPath.substring(from: strIdx) 
} 

let sourceUrl = URL(string: self.sourceUrl.appending(absPath)) 
let fileData = try NSData(contentsOf: sourceUrl!, options: NSData.ReadingOptions()) 
let destPath = documentUrl.appendingPathComponent(absPath) 

do { 
    try fileData.write(toFile: destPath.path, options: .atomicWrite) 
} catch { 
    print(error) 
} 

답변

0

absPath에는 하위 디렉토리가 있습니다. Documents에 파일을 직접 저장하려면 image 하위 디렉토리를 제거해야합니다.

let destPath = documentUrl.appendingPathComponent(sourceUrl!.lastPathComponent) 

그렇지 않으면 당신은 Documentsimage 디렉토리를 생성해야합니다.


참고 : 스위프트 3에서 NSData를 사용하지 않는 매우 관련 URL API

do { 
    let fileData = try Data(contentsOf: sourceUrl!) 
    try fileData.write(to: sourceUrl!, options: .atomic) 
... 
를 사용하는 것이 좋습니다