ios - Swift:将 Facebook JSON 中的名称、照片和封面设置为变量不起作用。

标签 ios swift facebook facebook-graph-api

我是 Facebook API 的新手,我正在尝试创建一个个人资料页面,其中的用户姓名、个人资料图片和封面照片均取自 Facebook。我能够解析提供的 JSON 数据并获取名称、封面 url 和图片 url,但是当我尝试将它们设置为另一个类中的 IBOutlet 时,它不会改变任何内容。 UILabel 和 UIImageView 保持不变。`

class ViewController: UIViewController, BWWalkthroughViewControllerDelegate, FBSDKLoginButtonDelegate {

var profilePageViewController : profilePage!
var profileVC = profilePage()

override func viewDidLoad() {
    super.viewDidLoad()

    let stb = UIStoryboard(name: "Main",bundle: nil)

    profilePageViewController = stb.instantiateViewController(withIdentifier: "profile") as! profilePage

    profileVC = profilePageViewController
}


// MARK: FACEBOOK DELEGATE

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) {

    print("Logged out of Facebook")
}

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {

    if error != nil{

        print(error)
        return
    }
}

func showFacebookInformation(){

    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, picture.type(large),cover"]).start(completionHandler: { (connction, result, error) in

        if(error != nil){
            print("Failed to start Graph API request", error)
            return
        }

        print(result)

        let result = result as! Dictionary<String,Any>

        // GETTING COVER PHOTO URL

        let cover = result["cover"] as! Dictionary<String,Any>
        let coverSource = cover["source"] as! String

        // GETTING NAME

        let name = result["name"] as! String

        // GETTING PROFILE PICTURE

        let picture = result["picture"] as! Dictionary<String,Any>
        let data = picture["data"] as! Dictionary<String,Any>
        let url = data["url"] as! String

        print("The profile picture URL is: ",url)
        print("The cover photo url is: ",coverSource)
        print("The name is: ",name)

        DispatchQueue.main.async {
            self.profileVC.profilePicture.sd_setImage(with: URL(string:url))
            self.profileVC.userName.text = name 
        }
    })
}

@IBAction func logUserIn(){

    FBSDKLoginManager().logIn(withReadPermissions: ["public_profile"], from: self) { (result, error) in

        if(error != nil){

            print("Facebook Login failed: ",error)
            return
        }
        else{
            self.profileVC.loadViewIfNeeded()
            self.showFacebookInformation()
            }
        }
    }
}
}

最佳答案

我可以看到您正在尝试从已实例化的 Viewcontroller 设置 UILabel 和 UIImageView,而不是将数据传递到配置文件 View Controller 并在其 viewdidload 或 viewwillappear 方法中设置值。发生这种情况是因为布局尚未准备好。

关于ios - Swift:将 Facebook JSON 中的名称、照片和封面设置为变量不起作用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44494984/

相关文章:

ios - 有没有办法将 AVSpeechBoundary 设置为某个值或者在句子完成之后?

ios - Swift - 来自结构数组的数据未显示在 TableView 中

facebook - 打开的图形对象是否必须对应于用户可见的页面?

Facebook API & Spring Social——如何发布 friend 墙

ios - 字符串双重故障排除

iOS。将 block 作为参数传递给 block

ios - UITableViewCell 中的 UIImageView 或 AVPlayer(照片或视频)

javascript - Chrome 扩展程序第一次无法运行

ios - 使用 Apple Pencil 流畅绘图

ios - UITableViewCell 交换中的 UILabel 文本值