使用 swift 从 Facebook SDK GraphRequest 获取进度

Posted

技术标签:

【中文标题】使用 swift 从 Facebook SDK GraphRequest 获取进度【英文标题】:Get progress from Facebook SDK GraphRequest with swift 【发布时间】:2016-07-20 13:29:00 【问题描述】:

我用这段代码上传了一张图片:

    FBSDKGraphRequest(graphpath: "me/photos", parameters: params as [NSObject : AnyObject], HTTPMethod: "POST").startWithCompletionHandler( (connection, result, error) -> Void in

        if (error != nil) 
            print ("failed")
        
        else 
            print ("success")
        

    )

到目前为止它工作正常,但上传可能需要一段时间,我想通知用户当前的进度。有什么办法可以得到目前的进展吗?正如我在 SDK 文档中看到的那样,有一个 FBSDKGraphRequestConnection 提供了一个 FBSDKGraphRequestConnectionDelegaterequestConnection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite: 中的进度内容,但我无法理解如何在我的一小段代码中实现这些内容。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

我其他人也有同样的问题……谷歌找不到任何用 swift 编写的东西。这是我的工作解决方案:

1) 从NSObjectFBSDKGraphRequestConnectionDelegate 派生您的课程

2) 像这样编写您的上传过程:

    let uploadRequest = FBSDKGraphRequest(graphPath: "me/photos", parameters: params as [NSObject : AnyObject], HTTPMethod: "POST")
    let connection = FBSDKGraphRequestConnection()
    connection.delegate = self
    connection.addRequest(uploadRequest, completionHandler: 
        (connection, result, error) -> Void in

        if (error != nil) 
            // error handling
        
        else 
            // success handling
        
    )
    connection.start()

3) 像这样在你的类中实现委托:

func requestConnection(connection:FBSDKGraphRequestConnection, didSendBodyData bytesWritten:NSInteger, totalBytesWritten:NSInteger, totalBytesExpectedToWrite:NSInteger) 
    print("upload percent reached: " + String(Double(totalBytesWritten) / Double(totalBytesExpectedToWrite)))

    // handle your UI here to show the current status

【讨论】:

以上是关于使用 swift 从 Facebook SDK GraphRequest 获取进度的主要内容,如果未能解决你的问题,请参考以下文章

我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别

无法从 Swift 中的 Facebook iOS SDK 捕获城市和国家/地区值

Facebook SDK 的 Swift 包问题

Swift 3 和 Facebook swift SDK

Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)

使用 SWIFT 在 iOS SDK for Facebook 上使用 FBSDKGraphRequest