【问题标题】:Get array of facebook albums in swift using Facebook SDK 4.1使用 Facebook SDK 4.1 快速获取 Facebook 相册数组
【发布时间】:2015-07-22 06:51:51
【问题描述】:

我正在尝试使用以下 Swift 代码通过新的 Facebook SDK 4.1 获取用户的 Facebook 相册数组:

func getAlbumList()
{
    var FBAlbums = [String]()
    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me?fields=albums", parameters: nil)
    graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in

        if ((error) != nil)
        {
            // Process error
            println("Error: \(error)")
        }
        else
        {
            println("fetched data: \(result)")

            let graphData = result.valueForKey("data") as Array;

            for obj:FBGraphObject in graphData{
                let desc = obj.description;
                println(desc);
                let name = obj.valueForKey("name") as String;
                println(name);
            }

        }
    })
}

FB SDK 查询工作正常,因为结果值包含来自 facebook 的所有数据(打印正常),但是任何将其实际转换为数组的尝试都失败了。

使用 XCode 6.3 会出现以下错误:

let graphData = result.valueForKey("data") as Array; = 'AnyObject?' is not convertible to 'Array<T>'

for obj:FBGraphObject in graphData{ = Use of undeclared type 'FBGraphObject'

我似乎找不到任何关于替换 FBGraphObject 的信息,或者为什么我无法将结果转换为数组。

用作背景的文章(但似乎已过时):

Creating an Array of objects from the Facebook SDK in Swift

http://selise.ch/build-a-facebook-album-browser-using-swift/

【问题讨论】:

  • 你不能只转换为“数组”,你必须给出数组的类型,即使它只是[AnyObject]。在您的情况下,请尝试let graphData = result.valueForKey("data") as [FBGraphObject]。 (只是从你的代码中猜测,我不是 Facebook SDK 用户)

标签: ios facebook swift facebook-graph-api facebook-sdk-4.0


【解决方案1】:

只需更改这行代码:

let graphData = result.valueForKey("data") as Array;

收件人:

self.dict = result["data"] as! NSArray

这适用于我从 facebook 检索用户照片:

FBSDKGraphRequest(graphPath: "me/photos", parameters: ["fields": "id, name, source"]).startWithCompletionHandler({ (connection, result, error) -> Void in
    if (error == nil){
        self.dict = result["data"] as! NSArray

        for item in self.dict { // loop through data items

            if let urlString = item["source"]! {
                let url = NSURL(string: urlString as! String)
                let imageData = NSData(contentsOfURL: url!)
                let image = UIImage(data: imageData!)
                self.socialPhotoCollection.append(image!)

            }
        }
    }
})

【讨论】:

    【解决方案2】:

    这是为了以不同的方式获取所有专辑

    Swift 3x:

    FBSDKGraphRequest(graphPath: "/me/albums", parameters: ["fields":"id,name,user_photos"], httpMethod: "GET").start(completionHandler: {  (connection, result, error) in
    
    
            print(result!)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多