次の関数をviewControllerに直接実装すると、すべて正常に動作します。(これは完全ではありませんが、写真には機能します)
func getFBData() {
if((FBSDKAccessToken.currentAccessToken()) != nil){
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, email, first_name, last_name, picture"]).startWithCompletionHandler({ (connection, result, error) -> Void in
if (error == nil){
let email = result.valueForKey("email") as? String
let fbid = result.valueForKey("id") as! String
let fname = result.valueForKey("first_name") as! String
let lname = result.valueForKey("last_name") as! String
let facebookProfileUrl = "http://graph.facebook.com/\(fbid)/picture?type=large"
let url = NSURL(string: facebookProfileUrl)
if let data = NSData(contentsOfURL: url!) {
self.imgProfile.image = UIImage(data: data)
}
}
})
}
}
しかし、代わりに、Facebook に関連するすべてのものをFacebookController.swiftクラスで分離しておくようにしました。
class func getUserData() -> [String: String] {
var dict: [String: String]?
let token = FBSDKAccessToken.currentAccessToken()
let graphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, email, name, first_name, last_name, picture"])
if((token) != nil) {
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if (error == nil) {
let fbid = result.valueForKey("id") as! String
let name = result.valueForKey("name") as? String
let fname = result.valueForKey("first_name") as! String
let lname = result.valueForKey("last_name") as! String
let email = result.valueForKey("email") as? String
let pictureURL = "http://graph.facebook.com/\(fbid)/picture?type=large"
dict = ["id": fbid, "name": name!, "fname": fname, "lname": lname, "email": email!, "picture": pictureURL]
print(dict)
} else {
print("ok")
print("\(error)")
}
})
}
return dict!
}
ユーザーはログインしており、すべての権限が付与されていますが、電話をかけようとするとFacebookController()
. getUserData()
nil である dict を返します。これは、のcompletionHandlerがgraphRequest
呼び出されないためであるとすでに考えていました。
誰でも助けることができますか?