2017-10-04 50 views
1

我的應用程序記錄音頻,然後創建一個ENNote,並將生成的音頻文件作爲資源(以及當前的日期和時間作爲標題),並將此音符上傳到Evernote。上傳完成後,用戶已收到通知。現在我也想顯示上傳進度。所以我使用這個功能:印象筆記:我如何獲得筆記的上傳進度?

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

一切正常,除了的progressHandler永遠不會被調用。 我搜索Evernote的SDK,並發現這種代碼在幾個地方:

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

這似乎有什麼用它做。但是我必須說我對這個#if ...#endif語法不熟悉。我搜索了示例項目,並且找不到實際設置了EN_PROGRESS_HANDLERS_ENABLED值的地方。

我認爲progressHandler只有在進程需要足夠長的時間纔會被調用,所以我記錄了幾分鐘(4 MB)並上傳了該記錄。上傳花費了更長的時間,但progressHandler仍然沒有被調用。

我在互聯網上搜索了很長時間,但沒有運氣。 爲什麼進程處理程序從不調用?我如何獲得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。 (儘管我使用的是CocoaPods,但事實證明它的工作方式。)這樣做給了我決定性的線索。控制檯打印出來:「進度塊已被棄用」。這句話的互聯網搜索引導我進入上面引用的發佈註釋頁面。我想我應該養成閱讀發行說明的習慣。

(順便說一句,在progressHandler現在接到電話,但只有一次,用1.0的進步,對於較長時間的錄製時也是如此。)


沒有喬什 - 卡斯威爾的回答,我不會沒有發現。儘管如此,我仍然認爲自己應該寫出自己的答案,因爲對於有這個問題的人來說,喬希的答案並不是問題的答案,儘管這是重要的一步。


編輯:現在我發現GitHub上已經有相應的issue了。

+1

對,很高興你發佈了更完整的解決方案。 –

1

嗯,這是一個預處理語句。這意味着如果在編譯SDK時將符號EN_PROGRESS_HANDLERS_ENABLED定義爲非零值,則內部代碼將被包含(並執行)。

如果您的項目自己構建SDK,則可以將EN_PROGRESS_HANDLERS_ENABLED=1添加到包含SDK的目標的「預處理器宏」構建設置。 (如果您使用Cocoapods,you'll need to use a post-install hook。)如果SDK是預編譯的,那麼您運氣不好。


注意,我不熟悉,在所有與Evernote的SDK,所以我不知道其他的後果可能是啓用此設置的東西。

+0

聽起來很有趣,我會嘗試並回來。 - 順便說一下,我看到你編輯了「快速」標籤。 SDK是Objective-C,但我的代碼是Swift,所以我認爲我應該添加兩個標籤。 (這是討論這個問題的正確的地方嗎?) –

+0

哦,謝謝你:) –

+0

不客氣。您使用Swift SDK的事實是無關緊要的。當然,你不一定知道,所以我明白你爲什麼包含標籤。這兩種方式都不是什麼大不了的,但是把標籤關掉會更準確些。 –

相關問題