質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

417閲覧

Fetal errorでfacebook認証が出来ません

gomasan

総合スコア96

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/08/30 14:55

編集2019/08/30 15:00

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

大変お手数ですが、お力をいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

UserDefaultsのキーの名前間違えていませんか?
pitureURLStringpictureURLStringがあると思います。

Swift

1 //1度FBログインができたら、2回目はしなくていい 2 UserDefaults.standard.set(1, forKey: "loginOK") 3 UserDefaults.standard.set(self.displayName, forKey: "displayName") 4 UserDefaults.standard.set(self.pitureURLString, forKey: "pitureURLString") 5 6 //以下のコードでエラーが出る 7 let imageString = UserDefaults.standard.object(forKey: "pictureURLString") as! String 8

投稿2019/08/30 17:54

hayabusabusash

総合スコア767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gomasan

2019/08/31 03:18

わーありがとうございます。。!!!とても初歩的なミスでした。無事ログインし画面遷移出来ました。とても助かりました。本当にありがとうございます。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問