VimeoUpload - не получает обновление хода загрузки с использованием подхода KVO - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь загрузить видео на платформу Vimeo, используя официальную библиотеку VimeoUpload из Github . Я настроил его правильно согласно инструкции по установке здесь .

Проблема, с которой я здесь сталкиваюсь, заключается в том, что я не получаю обновление прогресса загрузки, я использую подход KVO, чтобы получить то же самое. После регистрации наблюдателя с использованием addObserver() и ожидания в течение некоторого времени выполнение никогда не подпадает под метод observeValue().

Ниже мой код, пожалуйста, проверьте.

import Foundation
import VimeoUpload

protocol VideoUploadListener {
    func onVideoUploadUpdate(progress: Double)
    func onVideoUploadSuccess(media:PostMedia)
    func onVideoUploadFailure()
}

class VimeoHelper:NSObject {

    private static let Identifier = "com.ios.weapp"
    private static let AccessToken = "my_access_token"
    private static let ProgressKeyPath = "progressObservable"
    private static let StateKeyPath = "stateObservable"

    var postMedia:PostMedia?
    private var listener:VideoUploadListener?

    private var vimeoUpload:VimeoUploader<OldUploadDescriptor>?
    private var descriptor:OldUploadDescriptor?

    private var progressKVOContext = UInt8()
    private var stateKVOContext = UInt8()

    init(postMedia:PostMedia, listener:VideoUploadListener) {
        self.postMedia = postMedia
        self.listener = listener
    }

    private func initVimeo() {

        vimeoUpload = VimeoUploader<OldUploadDescriptor>(backgroundSessionIdentifier: VimeoHelper.Identifier, accessToken: AccessToken, apiVersion: "3.3.1")
        let videoSettings = VideoSettings(title: "Untitled Video", description: "N/A", privacy: "anybody", users: nil, password: nil)
        descriptor = OldUploadDescriptor(url: (postMedia?.fileUrl)!, videoSettings: videoSettings)
    }

    public func startUpload() {

        initVimeo()

        vimeoUpload?.uploadVideo(descriptor: descriptor!)
        descriptor = vimeoUpload?.descriptor(for: VimeoHelper.Identifier)
        descriptor?.addObserver(self, forKeyPath: VimeoHelper.ProgressKeyPath, options: .new, context: &self.progressKVOContext)
        descriptor?.addObserver(self, forKeyPath: VimeoHelper.StateKeyPath, options: .new, context: &self.stateKVOContext)
    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        if let keyPath = keyPath {

            switch (keyPath, context) {

            case (VimeoHelper.ProgressKeyPath, &self.progressKVOContext):
                if let progress = change?[.newKey] as? Double {
                    //Call Listener
                    self.listener?.onVideoUploadUpdate(progress: progress)
                }
                break;
            case (VimeoHelper.StateKeyPath, &self.stateKVOContext):
                let stateRaw = (change?[.newKey] as? String) ?? DescriptorState.ready.rawValue;
                let state = DescriptorState(rawValue: stateRaw)!
                //Call Listener
                if state == .finished {
                    self.listener?.onVideoUploadSuccess(media: self.postMedia!)
                }
                break;

            default:
                super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
            }
        } else {
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
        }
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...