我是 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/