2017-09-29 17 views
1

문서 유형을 활성화하여 다른 앱에서 내 애플리케이션으로 파일을 가져 오거나 복사했습니다. 몇 가지 질문이 있습니다.iOS,받은 편지함 폴더에서 문서 경로로 파일 복사

1- 여기서 파일을받은 편지함에서 문서 디렉토리로 이동하는 방법을 만들어야합니까? 이 곳이 맞습니까? 첫번째보기 나는 문서 디렉토리에서 파일을 얻고 컨트롤러에서 func applicationWillEnterForeground(_ application: UIApplication)

2 :

func getFileListByDate() -> [String]? { 

     let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! 
     if let urlArray = try? FileManager.default.contentsOfDirectory(at: directory, 
                     includingPropertiesForKeys: [.contentModificationDateKey], 
                     options:.skipsHiddenFiles) { 

      return urlArray.map { url in 
       (url.lastPathComponent, (try? url.resourceValues(forKeys: [.contentModificationDateKey]))?.contentModificationDate ?? Date.distantPast) 
       } 
       .sorted(by: { $0.1 > $1.1 }) // sort descending modification dates 
       .map { $0.0 } // extract file names 

     } else { 
      return nil 
     } 

    } 

하지만 내 테이블보기에서 Inbox 폴더 (항목) 내 응용 프로그램에 파일 수입이있을 때, 어떻게 Inbox에서 Document 디렉토리로 파일을 자동으로 이동하고받은 편지함 폴더를 제거 할 수 있습니까?

+1

귀하의 질문은 명확하지 않습니다. 명확하게 할 수 있습니까? – manismku

답변

4

앱은 대리자 메서드를

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 

을 구현하고 앱 내 원하는 폴더로 URL을 이동해야하는 다른 응용 프로그램에서 오는 파일을 열 필요가있는 경우.

let url = url.standardizedFileURL // this will strip out the private from your url 
// if you need to know which app is sending the file or decide if you will open in place or not you need to check the options 
let openInPlace = options[.openInPlace] as? Bool == true 
let sourceApplication = options[.sourceApplication] as? String 
let annotation = options[.annotation] as? [String: Any] 
// checking the options info 
print("openInPlace:", openInPlace) 
print("sourceApplication:", sourceApplication ?? "") 
print("annotation:", annotation ?? "") 

// moving the file out of the inbox to your destination URL in your case the documents directory appending the url.lastPathComponent 

do { 
    try FileManager.default.moveItem(at: url, to: destinationURL) 
    print(url.standardizedFileURL.path) 
    print("file moved from:", url,"to:", destinationURL) 
    NotificationCenter.default.post(name: .updateSort, object: destination) 
} catch { 
    print(error) 
    return false 
} 

return true 
+0

고맙습니다. 시도해 보겠습니다.하지만 한 가지 질문은받은 편지함 폴더를 어떻게 제거 할 수 있습니까? –

+0

@ Mc.Lover 당신은 할 수 없습니다. 하지만 사용자에게 보여줘야한다는 의미는 아닙니다. 배열을 표시하기 전에 필터링 할 수 있습니다. –

+0

그래서 숨길 방법이 있습니까? 이 메서드는'getFileListByDate'에 의해 문서 폴더에서 파일을 가져오고 있기 때문에이 폴더와 파일을 모두 보여줘야합니다. 파일 만 표시하면됩니다. –