Swift:将 Facebook JSON 中的名称、照片和封面设置为变量不起作用。
Posted
技术标签:
【中文标题】Swift:将 Facebook JSON 中的名称、照片和封面设置为变量不起作用。【英文标题】:Swift: Setting name, photo, and cover from Facebook JSON to variables is not working. 【发布时间】:2017-06-12 08:42:45 【问题描述】:我是使用 Facebook API 的新手,我正在尝试创建一个个人资料页面,其中包含所有从 Facebook 获取的用户姓名、个人资料图片和封面照片。我能够解析提供的 JSON 数据并获取名称、封面 url 和图片 url,但是当我尝试将它们设置为另一个类中的 IBOutlets 时,它不会改变任何东西。 UILabel 和 UIImageViews 保持不变。`
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()
【问题讨论】:
通过 segue 传递详细信息并将值分配给该视图控制器的 viewDidLoad() 中的插座。您不能像这样直接分配值。 【参考方案1】:我可以看到您正在尝试从您已实例化的 Viewcontroller 设置 UILabel 和 UIImageView,而不是将数据传递到配置文件 viewcontroller 并在其 viewdidload 或 viewwillappear 方法中设置值。发生这种情况是因为尚未准备好布局。
【讨论】:
感谢您的评论。我使用 self.profileVC.loadViewIfNeeded() 的事实不是已经加载了配置文件视图控制器吗?以上是关于Swift:将 Facebook JSON 中的名称、照片和封面设置为变量不起作用。的主要内容,如果未能解决你的问题,请参考以下文章
无法将 FBSDKLoginKit 添加到 Swift 4 中的 Pod
swift中的Facebook Native Share对话框