2017-10-04 15 views
1

내 앱에서 오디오를 녹음 한 다음 결과 오디오 파일을 리소스 (그리고 현재 날짜와 시간을 제목으로 사용)로 ENNote를 만들고이 노트를 Evernote에 업로드합니다. 업로드가 완료되면 사용자에게 이미 알림이 전송됩니다. 이제 업로드 진행 상황을 보여 드리고자합니다. 그 제외 progressHandler는를 호출되지 않습니다,Evernote : 메모의 업로드 진행 상태를 확인하려면 어떻게해야합니까?

ENSession.shared.upload(note, policy: .create, to: nil, orReplace: nil, progress: progressHandler, completion: completionHandler) 

모든 작품 : 그래서이 기능을 사용하고 있습니다. 나는 에버 노트 SDK를 검색하고 여러 장소에서 이러한 종류의 코드를 발견

#if EN_PROGRESS_HANDLERS_ENABLED 
    if (context.progress) { 
     context.noteStore.uploadProgressHandler = context.progress; 
    } 
#endif 

이 함께 할 수있는 뭔가가 보인다. 하지만이 #if ... #endif 구문에 익숙하지 않다는 것을 말해야합니다. 샘플 프로젝트를 검색하여 EN_PROGRESS_HANDLERS_ENABLED 값이 실제로 설정된 장소를 찾을 수 없습니다.

progressHandler는 진행 시간이 오래 걸릴 때만 호출되므로 몇 분 (4MB) 동안 녹화하고 해당 녹음을 업로드한다고 생각했습니다. 업로드 시간이 상당히 오래 걸렸지 만 진행 과정이 여전히 불리지 않았습니다.

나는 꽤 오랫동안 인터넷을 검색했지만 운이 없었다. 진행률 처리기가 호출되지 않는 이유는 무엇입니까? ENNote의 업로드 진행 상황을 어떻게 확인할 수 있습니까? 여기

내 코드의 관련 부분은 다음과 같습니다

private func sendToEvernote() { 
    let progressHandler: ENSessionProgressHandler = { progress in 
     self.progressView.progress = Float(progress) 
     self.progressView.alpha = 1 
     print("Progress:", progress) // Never gets printed 
    } 

    let completionHandler: ENSessionUploadNoteCompletionHandler = { (noteRef, error) in 
     if let error = error { print(error.localizedDescription) } 
     self.noteRef = noteRef 
     self.progressView.alpha = 0 
     self.showBanner(text: "Upload complete. Tap here to open in Evernote.") 
    } 

    do { 
     let note = ENNote() 
     let title = titleFromCurrentDate() 
     let filename = title + ".m4a" 

     note.title = title 

     let data = try Data(contentsOf: audioURL) 
     guard let resource = ENResource(data: data, mimeType: "audio/mp4a-latm", filename: filename) 
      else { 
       alert(title: "Export failed", message: "Audio file could not be attached to note.") 
       return 
     } 

     note.add(resource) 

     ENSession.shared.upload(note, policy: .create, to: nil, orReplace: nil, progress: progressHandler, completion: completionHandler) 
    } catch { 
     alert(title: "Export failed", message: "Audio file could not be converted to Data type.") 
    } 
} 

답변

1

대답은 간단하고 슬픈 :

". 진행 블록의 중단 - 변경 불행하게도 일부가 의미가 진행 블록이 더 이상 최신 SDK에서 지원되는"

https://github.com/evernote/evernote-cloud-sdk-ios/blob/master/3.0_Release_Notes.md

(편집 : 현재까지 업로드 진행 상태를 확인할 수 없다는 것을 의미합니다.)


Josh Caswell의 답변에 따라 EN_PROGRESS_HANDLERS_ENABLED = 1로 설정하는 선처리 매크로를 추가했습니다. (비록 내가 코코아 포드를 사용하고 있지만, 이것이 작동하는 방식으로 밝혀졌다.) 이렇게하면 결정적인 단서가 생겼다. 콘솔에서 "진행 블록이 사용되지 않습니다"라고 인쇄되었습니다. 이 문장을 인터넷으로 검색하면 위에서 인용 한 릴리스 노트 페이지로 안내했습니다. 나는 릴리스 노트를 읽는 습관에 빠져 있어야한다고 생각한다.

은 (그런데, progressHandler 지금은 시간의 긴 기간 동안 기록하는 경우에도, 1.0의 진행으로, 한 번만 호출하지만,있어.) 조쉬 캐스 웰의 대답없이


, 나 같으면 발견하지 못했습니다. 아직도이 문제가있는 사람은 조쉬의 대답이 질문에 대한 대답이 아니기 때문에 내 자신의 대답을 작성해야한다고 생각했습니다.


편집 : 지금은 이미 GitHub의에 해당 issue이 있음을 발견했습니다.

+1

더 완벽한 해결책을 게시 해 주셔서 감사합니다. –

1

글쎄, 그건 프리 프로세서 문입니다. 즉, 심볼 EN_PROGRESS_HANDLERS_ENABLED이 SDK 컴파일시 0이 아닌 값으로 정의되면 내부의 코드가 포함되고 실행됩니다.

프로젝트가 SDK 자체를 빌드하는 경우 SDK가 포함 된 대상의 "프리 프로세서 매크로"빌드 설정에 EN_PROGRESS_HANDLERS_ENABLED=1을 추가 할 수 있습니다. (Cocoapods를 사용하는 경우 you'll need to use a post-install hook) SDK가 사전 컴파일 된 경우 운이 없게됩니다.


참고로 저는 Evernote SDK에 익숙하지 않으므로이 설정을 사용하면 다른 결과가 발생할 수 있습니다.

+0

재미있을 것 같네요, 나는 그것을 시도하고 돌아올 것입니다. - 그런데, 당신이 "신속한"꼬리표를 편집 한 것을 보았습니다. SDK는 Objective-C이지만 내 코드는 Swift이므로 두 태그를 모두 추가해야한다고 생각했습니다. (이 문제를 논의하기에 적합한 곳입니까?) –

+0

오, 고맙습니다. –

+0

당신은 천만에요. Swift에서 SDK를 사용한다는 사실은 부적절합니다. 당연히 그 사실을 알지 못할 것입니다. 그래서 나는 왜 당신이 그 꼬리표를 포함 시켰는지 이해합니다. 어느 쪽이든 큰 문제는 아니지만 태그를 그대로 두는 것이 정확합니다. –