2016-10-12 4 views
3

아이 클라우드 스위프트에 파일에서 데이터를 얻을 수 있지만 문제가 방법 :내가 아이 클라우드에서 파일을 가져오고 B64 형식 문자열로 변환하는 응용 프로그램을 만드는거야

난 정말 모르겠어요 이 파일에서 데이터를 가져 오는 방법. ICloud에서 가져온 파일에서 Path를 쉽게 여는 것이 가능하다고 생각했지만 경로에 액세스하려고 시도하면 nil을 반환합니다.

내 코드 예제는 여기에서 볼 수 있듯이 임시 경로가 있습니다. ((file : ///.../Aplication/xxx-xxx-xxx-xx/temp/com.domain.AppName/Carolina .CER) : 나는 파일 내부의 콘텐츠를 어떻게

extension KeyViewController: UIDocumentMenuDelegate { 

    func documentMenu(documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) { 
     documentPicker.delegate = self 
     print ("documentMenu") 
     self.presentViewController(documentPicker, animated: true, completion: nil) 
    } 
} 
extension KeyViewController: UIDocumentPickerDelegate { 

func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) { 
    print("url string") 
    print(String(url)) 
//prints file:///.../Aplication/xxx-xxx-xxx-xx/temp/com.domain.AppName/Carolina.cer 

if controller.documentPickerMode == UIDocumentPickerMode.Import { 
      if (NSFileManager.defaultManager().fileExistsAtPath(String(url))){ 
        print("exists") 
      } 
      else{ 
        print("not exists") 
      } 
     dispatch_async(dispatch_get_main_queue()) { 
      if let fileName = url.lastPathComponent { 
       var fileNameArray = fileName.componentsSeparatedByString(".") 
       print ("fileNameArray") 
       print (fileNameArray) 
       if ((fileNameArray[1] != "cer") && (fileNameArray[1] != "key")) { 
        self.alertMessage = "Not a valid selection, choose .cer or .key Files" 
        self.showAlertMessage(self.alertMessage) 
       } 
       else{ 
       //saving the name 
        if (fileNameArray[1]=="cer") 
        { 
NSUserDefaults.standardUserDefaults().setObject(fileName, forKey: "temporalCerFile") 
        } 
        else{ 
        //saving the name 
NSUserDefaults.standardUserDefaults().setObject(fileName, forKey: "temporalKeyFile") 
        } 
NSUserDefaults.standardUserDefaults().synchronize() 
        } 

       } 

      } 

     } 
    } 
} 

?, 당신은 내게 당신이 fileExistsAtPath:에 잘못된 값을 전달하기 때문에 귀하의 코드가 작동하지 않는

+0

주어진 URL에서 파일에 액세스하려는 시도는 어디에서 발생합니까? 게시 한 코드는 URL을 인쇄하고 URL의 파일 이름을 나눕니다. 그러나 실제로 URL에있는 파일에 액세스하려고 시도하지 않습니다. – rmaddy

+0

수정 됨, 죄송합니다. 해당 부분을 붙여 넣는 것을 잊어 버렸습니다. 감사합니다 –

+0

게시 한 업데이트 된 코드는 여전히 파일에 액세스하려고 시도하지 않습니다. 지금까지 가지고있는 것이 있는지 확인하는 것입니다. 그리고 당신이 게시 한 코드는'NSURL'을'String'을 기대하는 메소드에 전달하려고하기 때문에 컴파일되지 않습니다. – rmaddy

답변

0

을 도울 수 있기를 바랍니다하십시오

을.

파일 NSURL을 파일 문자열로 변환하는 올바른 방법은을 사용하는 것입니다.방법.

if (NSFileManager.defaultManager().fileExistsAtPath(url.path())) { 

url.path() 대신 url.path 일 수 있습니다. 더 오래된 Swift 구문에 대해서는 잘 모르겠습니다. 스위프트 3에서는 다음과 같습니다.

if FileManager.default.fileExists(atPath: url.path) { 

파일을로드하는 방법은 여러 가지가 있습니다. 그것은 모두 당신이 그것으로 무엇을 해야하는지에 달려 있습니다. 하지만 첫 번째 요구 사항은 파일을 주어진 url에서 앱의 샌드 박스 내부로 이동하는 것입니다. 적어도 다음에 앱을 사용할 때 파일이 필요할 경우. 이번에 한 번만 파일을 볼 필요가 있다면이 단계가 필요하지 않습니다.