1

在我的应用程序上,用户有个人资料图片,如果使用 Facebook 登录,则个人资料图片设置为当前 Facebook 个人资料图片。我遇到的问题是,如果用户在没有 Facebook 的情况下登录应用程序,则在尝试检索 Facebook 数据时应用程序崩溃。我怎样才能使它安全,所以如果无法获取 Facebook 数据,则可以将个人资料图片设置为空白。

lazy var profileImageView: UIImageView = {


    let user = FIRAuth.auth()?.currentUser
    let photoUrl = user?.photoURL
    let data = NSData(contentsOfURL: photoUrl!) 
        let profileView = UIImageView()
        profileView.image = UIImage(data: data!)
        profileView.contentMode = .ScaleAspectFill

        profileView.layer.cornerRadius = 16
        profileView.layer.masksToBounds = true

        profileView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)))
        profileView.userInteractionEnabled = true
        return profileView

}()
4

1 回答 1

0

您正在尝试通过强制解包可选值来创建 NSData,在这种情况下photoUrl。我假设如果用户没有使用 facebook 登录,则该属性的值为 nil。

您应该做的不是强制解包photoURL,而是首先检查它是否为 nil。为此,您可以使用警卫,这是检查某事的推荐方法

lazy var profileImageView: UIImageView = {
    let user = FIRAuth.auth()?.currentUser
    let photoUrl = user?.photoURL

    guard let photoUrl = user?.photoURL else {
        return UIImageView()
        //Here do the cusomization of the blank image before 
        //returning it
    }

    let data = NSData(contentsOfURL: photoUrl) 
    let profileView = UIImageView()
    profileView.image = UIImage(data: data!)
    profileView.contentMode = .ScaleAspectFill

    profileView.layer.cornerRadius = 16
    profileView.layer.masksToBounds = true

    profileView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSelectProfileImageView)))
    profileView.userInteractionEnabled = true
    return profileView

}()

这样,您就知道 photoURL 不会为 nil,否则,它将返回空白图像。

于 2017-02-08T02:13:53.340 回答