2017-03-10 21 views
0

これまでのところ、私はあなたが以下の画像で見ることができます左のバーボタンアイテムを達成しようとされています:場所写真

enter image description here

私はスタイルでコーディングしていませんプロファイルピクチャを取得するための基本的なコードです。ここにある:私は次の関数を使用してfirebaseからの私の写真を検索しています

let user = FIRAuth.auth()?.currentUser 
var profilePicture: UIImageView? 

override func viewDidLoad() { 
    //left bar button item setup 

    if let profileURL = self.user?.photoURL?.absoluteString { 
     let profilePictureUrl = NSURL(string: profileURL) 
     profilePicture?.af_setImage(withURL: profilePictureUrl as! URL) 

     let barButton = UIBarButtonItem(image: profilePicture?.image, landscapeImagePhone: nil, style: .done, target: self, action: #selector(revealBackClicked)) 
     self.navigationItem.leftBarButtonItem = barButton 
    } 


} 

:私は私の出力でそれを印刷して、それをテストしたとして、私は、URLを受け付けております

self.user?.photoURL?.absoluteString 

。しかし、問題は私がprofilePicture変数に画像を設定するときだと思います。なぜなら、それを印刷するときにはゼロを受け取るからです。

任意の助けもいただければ幸いです!

+0

'photoURL'はすでに' URL'です。なぜ、 'absoluteString'を取得し、' NSURL'を作成し(Swift 3では使わないでください)、 'URL'にキャストしますか?それは3つの無駄なステップです。 – rmaddy

+0

文字列の期待される戻り値の型があるためです。 –

+0

文字列の期待される戻り値の型は何ですか?ただします: 'let profileURL = self.user?.photoURL? {profilePicture?.af_setImage(withURL:profileURL)... '不必要なコンバージョンとキャストの必要はありません。 – rmaddy

答えて

1

イメージをダウンロードしている間にイメージをUIBarButtonItemに設定しようとすると、問題が発生します。イメージをダウンロードし、イメージをUIBarButtonItemに設定する必要があります。

let profilePictureUrl = NSURL(string: profileURL) 

let downloader = ImageDownloader() 
let urlRequest = URLRequest(url: profilePictureUrl) 

downloader.download(urlRequest) { response in 
    if let image = response.result.value { 
     let barButton = UIBarButtonItem(image: image, landscapeImagePhone: nil, style: .done, target: self, action: #selector(revealBackClicked)) 
     self.navigationItem.leftBarButtonItem = barButton 
    } 
} 
+1

ねえ、あなたの魂はうまくいきませんでした。おそらくあなたがダウンローダーへの強い参照を保持していないので、画像はまだ –

+0

@ RohanVasishthをロードしない? alamofireドキュメント: 'ImageDownloaderインスタンスを強く参照してください。そうしないと、クロージャが呼び出される前にダウンローダの参照が範囲外になるため、完了クロージャは呼び出されません。 –

0
let user = FIRAuth.auth()?.currentUser 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let profilePictureURL = self.user?.photoURL 

    DispatchQueue.global().async { 
     let data = try? Data(contentsOf: profilePictureURL!) 
     DispatchQueue.main.async { 
      let button = UIButton.init(type: .custom) 
      button.setImage(UIImage(data: data!), for: UIControlState.normal) 
      button.layer.cornerRadius = 0.5 * button.bounds.size.width 
      button.clipsToBounds = true 
      button.addTarget(self, action: #selector(UserGroupsMainViewController.profileButtonPressed), for: UIControlEvents.touchUpInside) 
      button.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 

      let barButton = UIBarButtonItem(customView: button) 
      self.navigationItem.leftBarButtonItem = barButton 

     } 
    } 

} 

func profileButtonPressed() { 

    print("Show Profile") 
} 
関連する問題