2016-08-14 15 views
0

私はFacebookのプロフィール写真とSwiftのユーザーの名前でプロフィールを作成しようとしています。私はログインボタンがあるViewControllerでそれらを取得することができますが、私はそれらが必要なところのProfile ViewControllerに表示されません。ここで私が使用したコードは次のとおりです。ログインページのFacebookのプロフィールの画像が表示されないSwift

:ここ

import UIKit 

class ViewController: UIViewController, FBSDKLoginButtonDelegate 
{ 

@IBOutlet var btnFacebook: FBSDKLoginButton! 
@IBOutlet var ivUserProfileImage: UIImageView! 
@IBOutlet var lblName: UILabel! 



override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    configureFacebook() 
} 



func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) 
{ 
    FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"first_name, last_name, picture.type(large)"]).startWithCompletionHandler { (connection, result, error) -> Void in 

     let strFirstName: String = (result.objectForKey("first_name") as? String)! 
     let strLastName: String = (result.objectForKey("last_name") as? String)! 
     let strPictureURL: String = (result.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as? String)! 

     self.lblName.text = "Welcome, \(strFirstName) \(strLastName)" 
     self.ivUserProfileImage.image = UIImage(data: NSData(contentsOfURL: NSURL(string: strPictureURL)!)!) 
    } 
} 

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) 
{ 
    let loginManager: FBSDKLoginManager = FBSDKLoginManager() 
    loginManager.logOut() 

    ivUserProfileImage.image = nil 
    lblName.text = "" 
} 



func configureFacebook() 
{ 
    btnFacebook.readPermissions = ["public_profile", "email", "user_friends"]; 
    btnFacebook.delegate = self 
} 

} 

は、プロファイルのViewControllerのためのコードは次のとおりです。

import UIKit 

class Profile: UIViewController { 

@IBOutlet weak var profilePicture: UIImageView! 
@IBOutlet weak var userName: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) 
    { 
     FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"first_name, last_name, picture.type(large)"]).startWithCompletionHandler { (connection, result, error) -> Void in 

      let strFirstName: String = (result.objectForKey("first_name") as? String)! 
      let strLastName: String = (result.objectForKey("last_name") as? String)! 
      let strPictureURL: String = (result.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as? String)! 

      self.userName.text = "Welcome, \(strFirstName) \(strLastName)" 
      self.profilePicture.image = UIImage(data: NSData(contentsOfURL: NSURL(string: strPictureURL)!)!) 
     } 
    } 

} 

} 

私は私が最初の間のリンクが欠けていると思いますVCとプロフィールVCが、私は確信していません。

ご協力いただきありがとうございます。

+0

**(loginButton:FBSDKLoginButton!didCompleteWithResult結果:FBSDKLoginManagerLoginResult!エラー:!NSError)**機能の両方でVC –

+0

それはどちらかというと論理的に見えませんでしたが、プロファイルVCでstrPictureURLを呼び出すことができず、他のVCのAPIへの2回目の呼び出しを試みましたが、これは明らかに良い考えではありません。 – TheoF

+0

** func prepareForSegue(送信者:AnyObject?)を使用して、ViewControllerからstrPictureURLをProfileVCに渡すことができます。 –

答えて

1
import UIKit 

class ViewController: UIViewController, FBSDKLoginButtonDelegate { 
@IBOutlet var btnFacebook: FBSDKLoginButton! 
@IBOutlet var ivUserProfileImage: UIImageView! 
@IBOutlet var lblName: UILabel! 
var object: AnyObject! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    configureFacebook() 
} 

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) 
{ 
    FBSDKGraphRequest.init(graphPath: "me", parameters: ["fields":"first_name, last_name, picture.type(large)"]).startWithCompletionHandler { (connection, result, error) -> Void in 

self.object = result 
self.performSegueWithIdentifier("YourSegueID", sender: self) 

} 

func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) 
{ 
    let loginManager: FBSDKLoginManager = FBSDKLoginManager() 
    loginManager.logOut() 

    ivUserProfileImage.image = nil 
    lblName.text = "" 
} 
    func configureFacebook() 
    { 
    btnFacebook.readPermissions = ["public_profile", "email", "user_friends"]; 
    btnFacebook.delegate = self 
    } 


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
       if segue.identifier == "YourSegueID" { 
        let dvc = segue.destinationViewController as? ViewController2 
         dvc!.object = object // sending facebook data from VC to ProfileVC 
       } 
      } 

} loginButton funcを呼び出している理由ProfileVC

import UIKit 
class Profile: UIViewController { 

@IBOutlet weak var profilePicture: UIImageView! 
@IBOutlet weak var userName: UILabel! 
var object: AnyObject! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print(object)// your facebook object 

print(object.objectForKey("first_name")as! String) 
print(object.objectForKey("id") as! String) 
print(object.objectForKey("last_name")as! String) 

let image = object.objectForKey("picture") as! NSObject 
let data = image.valueForKey("data") as! NSObject 
let ProfilepicUrl = data.valueForKey("url") as! String 
print(ProfilepicUrl) 
} 
+0

詳細な回答をいただきありがとうございます。私の画面上の私のUIImageとUILabelの要素に表示するために発行します。 – TheoF

+0

In ProfileVC ..? –

+0

はい、これに含まれています。 – TheoF

関連する問題