2017-05-08 7 views
0

私のアプリはログイン時にユーザー名を収集するためにGoogle SDKを使用しています。これはシームレスに動作します。しかし、googleのログインページで完了ボタンを押すとエラーが表示されます。 「致命的なエラー:オプションの値アンラップ意外ゼロ」Googleの名前がオプションの値からnilを返すとアプリケーションがクラッシュする

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 


nameString = user.profile.name 


defaults.set(nameString, forKey: "userName") 
defaults.set(user.profile.email, forKey: "email") 
defaults.set(user.profile.imageURL(withDimension: 50)!, forKey: "image") 

print("email: \(user.profile.email!)") 
print("name: \(user.profile.name!)") 
print("lastname: \(user.profile.familyName!)") 
print("lastname: \(user.profile.imageURL(withDimension: 50))") 


self.dismiss(animated: true, completion: nil) 
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "UserLoggedIn"), object: nil) 

だからこれは私が名前を受け取るために使用したとuserDeafaultsを経由して、それらを保存しています関数です。

実際の問題は、 "nameString = user.profile.name" のような行です。ログイン画面でプレスが完了した時点でログインするようにスキップしているためです。その結果、user.profile.nameからのデータは受信されません。

どうすればこの問題を解決できますか? user.profile.nameに何も含まれていなければ、名前をnamestringに保存しません。

somヘルプに本当に感謝します。ありがとう:)

+0

を渡しませんnilをnameStringがある場合、 'user'は' nとするとき、あなたがやりたいんどのようなので、あなたがnameStringをアンラップ強制することができますチェックil'? – vacawama

+0

いいえ、開始画面に戻ってください。 –

+0

ガードステートメントを追加してください。 'nameString = ...'行の前に 'guard user = user else {return}'を追加してください。 – vacawama

答えて

0

あなたはnameStringを聞かせ声明

if let nameString = user?.profile.name { 
    // here your safe to use the nameString it check's if it's not nil 
    defaults.set(nameString, forKey: "userName") 
} 

や@vacawamaなどが文字列かどうかをチェックするために、ガード文を使用することができた場合は、安全の内側にそれをアンラップするnilでないかどうかを確認する必要がありますはありません。ガードステートメントでは、あなたは帰還しなければならないことに留意する必要があります。つまり、名前が無ければ、それは機能から壊れることを意味します。

文字列に文字列が含まれているかどうかを確認する別の方法もあります。あなたがより多くを読むことができ、それらをチェックする方法をここにextending Strings extension

お聞かせたりせた場合nameStringでない場合、あなたは直接確認することができ、ガードを使用したくない場合は、ガード

guard let nameString = nameString else { return } 

を使用してそれをアンラップする方法このガードの後に​​空

guard nameString != nil else { 
     return 
} 

あなたがそのチェックに

+0

Thx :)しかし、それはまだ同じエラーがあります:/あなたはどのようにガードブロックをより正確に書いていますか? –

+0

あなたは別の方法でガードを使用することができます私はガードを追加する私の答えを編集するつもりです –

+0

、ありがとう! –

関連する問題