2017-11-03 24 views
0

작업중인 macOS 프로그램이 대화 상자를 통해 이미지를로드 한 다음 사용자에게 자르고 미리 봅니다. 이제 이미지가 원래로드 된 경로의 폴더에 다시 저장됩니다. 나는 .write(to: URL) 메서드와 NSFileManager를 통해 이미지 데이터를 저장하려고 시도했다. 어느 쪽도 일하지 않았다.경로에 NSImage 저장이 작동하지 않습니다.

출력 :

file:///Users/username/Downloads/test.png 
File creation failed 

코드 :

아마 인해 샌드 박스
@IBAction func browseFile(_ sender: NSButton) { 
    let dialog = NSOpenPanel(); 

    dialog.title     = "Choose an image file"; 
    dialog.showsResizeIndicator = true; 
    dialog.showsHiddenFiles  = false; 
    dialog.canChooseDirectories = true; 
    dialog.canCreateDirectories = true; 
    dialog.allowsMultipleSelection = true; 
    dialog.allowedFileTypes  = ["jpg","jpeg","png"]; 

    if (dialog.runModal() == NSApplication.ModalResponse.OK) { 
     let result = dialog.url // Pathname of the file 

     if (result != nil) { 

      // "result" is the path of the image selected via the dialog 
      let corrected: NSImage = cutImage(image: NSImage(contentsOf: result!)!) // crop image 
      imageView.image = corrected // show cropped image preview 

      // save cropped image to disk 
      let fileName = "test" 
      let fileManager = FileManager.default 
      let fileURL = result!.deletingLastPathComponent().appendingPathComponent("\(fileName).png") // set url to the same folder as where the image was loaded from 
      print(fileURL) 
      if let pngImageData = corrected.PNGRepresentation { 
       //try? pngImageData.write(to: fileURL, options: .atomic) 
       fileManager.createFile(atPath: fileURL.path, contents: pngImageData, attributes: nil) 
       if fileManager.fileExists(atPath: fileURL.path) { 
        print("File successfully saved") 
       } else { 
        print("File creation failed") 
       } 
      } 

     } 
    } else { 
     // User clicked on "Cancel" 
     return 
    } 
} 
+0

타깃> 앱 샌드 박스> 파일 액세스를 참조하십시오. –

+0

이것은 효과가 있습니다! 당신의 도움을 주셔서 감사합니다 –

답변

0

. 앱에 열기 대화 상자를 통해 <folder>/originalfile.png을로드 할 수있는 권한이 있지만 <folder>/test.png에 저장할 수있는 권한이 없습니다. 새 파일을 저장할 수있는 권한을 얻으려면 저장 대화 상자 (기본 파일 이름을 미리 선택할 수 있음)를 사용자에게 제시해야합니다.