ios - Evernote:如何获取笔记的上传进度?

标签 ios objective-c evernote

我的应用程序会录制音频,然后创建一个 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.")
    }
}

最佳答案

嗯,这是一个预处理器语句。这意味着如果符号 EN_PROGRESS_HANDLERS_ENABLED当 SDK 编译时被定义为非零值,里面的代码将被包含(并执行)。

如果您的项目自己构建 SDK,您可以添加 EN_PROGRESS_HANDLERS_ENABLED=1到包含 SDK 的目标的“预处理器宏”build设置。 (如果您使用的是 Cocoapods,you'll need to use a post-install hook。)如果 SDK 是预编译的,那么您就不走运了。

请注意,我对 Evernote SDK 一点也不熟悉,所以我不知道启用此设置可能会产生什么其他后果。

关于ios - Evernote:如何获取笔记的上传进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46564616/

相关文章:

ios - CLGeocoder 返回错误 : The operation couldn’t be completed.(kCLErrorDomain 错误 8。)

python - 印象笔记更新笔记资源

ios 无法获取 BatchedBridge,请确保您的包已正确打包

ios - 具有多个 View 的 ScrollView iOS Autolayout

objective-c - 如何在 XCode 中获取文本字段的文本

ios - 有没有办法让自定义表格 View 单元格看起来像 Xcode 6+ 中的按钮?

c++ - Evernote 是否仍支持 C++ API?

ios - 添加一个 UILabel 作为 UITextView 的 subview ,带有换行符且没有水平指示器

ios - 位置管理器委托(delegate)调用更新 TableView 问题

objective-c - NSWindow 不会在 OSStatus 事件处理程序方法中显示