【问题标题】:Having a trouble with embed youtube videos Swift Firebase嵌入 youtube 视频时遇到问题 Swift Firebase
【发布时间】:2018-09-10 12:55:38
【问题描述】:

我正在使用 WKWebView 来查看 youtube 视频。如果我在应用程序中输入我的 youtube 视频嵌入链接,它可以正常工作。但是当我从 firebase 获取 youtube 嵌入视频代码时,youtube 显示错误。我已经在控制台中检查了我正在接收视频代码,并且它已成功分配给我的 url 链接变量。我不知道我的 Firebase 和 youtube 有什么问题

请帮帮我。

class VideoViewController: UIViewController, WKNavigationDelegate {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
var ref: DatabaseReference!
var videolink = ""

@IBOutlet weak var webView: WKWebView!{
    didSet{
        webView.navigationDelegate = self
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    fetchOffers()
    getVideo(videoCode: videolink)

}
func fetchOffers(){

    let databaseRef = Database.database().reference().child("Helsinki")
    databaseRef.queryOrdered(byChild: "bar_name").queryEqual(toValue: self.appDelegate.selectedBarName).observe(.value, with: { snapshot in

        if ( snapshot.value is NSNull ) {
            print("not found)")

        } else {
            print(snapshot.value!)
            for child in snapshot.children {
                let snap = child as! DataSnapshot
                let imageSnap = snap.childSnapshot(forPath: "video")
                print(imageSnap)
                let dataDict = imageSnap.value as! [String : AnyObject]
                let videoLink = dataDict["videolink"] as! String
                self.videolink.append(videoLink)
                print("This is shit", self.videolink)
            }


        }
    })
}

func getVideo(videoCode:String){
    let url = URL(string: "https:/www.youtube.com/embed/\(videoCode)")
    webView.load(URLRequest(url : url!))
}

my youtube error

【问题讨论】:

  • 如果你硬编码你会从 Firebase 读取的值,你能重现这个问题吗?如果是这样,您可以排除 Firebase 作为潜在原因,并显着减少我们需要了解的代码。如果您无法使用硬编码值进行复制,则意味着问题出在您从 Firebase 读取的内容中。在print(imageSnap) 上设置断点并检查您看到的值与您硬编码的值有何不同。

标签: swift firebase youtube


【解决方案1】:

这很明显。您正在调用 Async 方法来获取视频代码,但没有等待播放。有几种方法可以解决这个问题。

一种简单的方法是将您的调用 getVideo(videoCode: videolink) 移动到 fetchOffers 方法中,如下所示:

print("This is shit", self.videolink)
self.getVideo(videoCode: videolink)

另一种方法是像这样在 fetchOffers 方法中传递一个处理程序(闭​​包),该方法将返回字符串。

func fetchOffers(success: @escaping ((_ code: String) -> Void), failure: @escaping ((_ error: Error) -> Void)){

// same code just return success
print("This is shit", self.videolink)
success(videolink)
}

现在像这样在视图控制器内部调用:

fetchOffers(success:{[weak self] (code) in
        self?.getVideo(videoCode: code)
    }) { (error) in
        print(error)
}

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 2022-10-13
    • 2013-09-02
    • 2019-08-28
    • 2022-01-17
    • 2019-11-12
    • 1970-01-01
    • 2016-11-26
    • 2011-05-18
    相关资源
    最近更新 更多