私のアプリはログイン時にユーザー名を収集するために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ヘルプに本当に感謝します。ありがとう:)
を渡しませんnilをnameStringがある場合、 'user'は' nとするとき、あなたがやりたいんどのようなので、あなたがnameStringをアンラップ強制することができますチェックil'? – vacawama
いいえ、開始画面に戻ってください。 –
ガードステートメントを追加してください。 'nameString = ...'行の前に 'guard user = user else {return}'を追加してください。 – vacawama