facebook認証をさせるために以下のコードを書きましたが、Fatal errorで先に進みません。
nilの使い方が悪いのでしょうか。
環境
xcode: 10.2.1
iOS:12.1
swift: 5.0
コード
viewcontroller
1import UIKit 2import FBSDKCoreKit 3import FBSDKLoginKit 4import FacebookCore 5import FacebookLogin 6import Firebase 7 8class ViewController: UIViewController, LoginButtonDelegate { 9 func loginButtonDidLogOut(_ loginButton: FBLoginButton){ 10 print("ログアウトしました") 11 } 12 13 let fbLoginButton:FBLoginButton = FBLoginButton() 14 var displayName = String() 15 //http.urlから画像をとってくるため 16 var pitureURL = String() 17 var pitureURLString = String() 18 19 20 override func viewDidLoad() { 21 super.viewDidLoad() 22 23 //fbloginbutton 24 fbLoginButton.delegate = self 25 fbLoginButton.frame = CGRect(x: view.frame.size.width/2 - view.frame.size.width/4, y: view.frame.size.height/4, width: view.frame.size.height/2, height: 30) 26 fbLoginButton.permissions = ["public_profile,email"] 27 view.addSubview(fbLoginButton) 28 29 } 30 31 override func viewWillAppear(_ animated: Bool) { 32 super.viewWillAppear(animated) 33 34 //navigationbuttonを隠す 35 navigationController?.isNavigationBarHidden = true 36 37 } 38 39 func loginButton(_ loginButton: FBLoginButton, didCompleteWith result: LoginManagerLoginResult?, error: Error?) { 40 41 if error == nil{ 42 if result?.isCancelled == true{ 43 return 44 } 45 } 46 47 let credential = FacebookAuthProvider.credential(withAccessToken: AccessToken.current!.tokenString) 48 49 Auth.auth().signIn(with: credential) { (result, error) in 50 51 //if let error = error{} = if error == nil{} 52 if error != nil{ 53 //エラーがあればこれから先は行かない! 54 return 55 56 } 57 self.displayName = result!.user.displayName! 58 self.pitureURLString = result!.user.photoURL!.absoluteString 59 //そのままだと画像が小さいので、以下でサイズ調整 60 self.pitureURLString = self.pitureURLString + "?type=large" 61 62 //1度FBログインができたら、2回目はしなくていい 63 UserDefaults.standard.set(1, forKey: "loginOK") 64 UserDefaults.standard.set(self.displayName, forKey: "displayName") 65 UserDefaults.standard.set(self.pitureURLString, forKey: "pitureURLString") 66 67 let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "next") as! NextViewController 68 69 //画面遷移 70 self.navigationController?.pushViewController(nextVC, animated: true) 71 72 } 73 } 74 func loginButtonWillLogin(_ loginButton: FBLoginButton) -> Bool { 75 return true 76 } 77 78} 79
nextviewcontroller
1import UIKit 2import SDWebImage 3 4class NextViewController: UIViewController { 5 6 @IBOutlet weak var profileimageView:UIImageView! 7 @IBOutlet weak var usernameLabel: UILabel! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 if UserDefaults.standard.object(forKey: "pictureURLString") != nil || (UserDefaults.standard.object(forKey: "displayName") != nil){ 13 14 **//以下のコードでエラーが出る** 15 let imageString = UserDefaults.standard.object(forKey: "pictureURLString") as! String 16 17 profileimageView.sd_setImage(with: URL(string: imageString), completed: nil) 18 19 //角を丸くする 20 profileimageView.layer.cornerRadius = 20.0 21 let displayName = UserDefaults.standard.object(forKey: "displayName") as! String 22 23 usernameLabel.text = displayName 24 25 } 26 // Do any additional setup after loading the view. 27 } 28 override func viewWillAppear(_ animated: Bool) { 29 super.viewWillAppear(animated) 30 31 navigationController?.isNavigationBarHidden = true 32 } 33}
エラーの詳細
nextviewcontroller
1let imageString = UserDefaults.standard.object(forKey: "pictureURLString") as! String
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
大変お手数ですが、お力をいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/31 03:18
2019/08/31 03:51