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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

657閲覧

"FirebaseUI"のメソッド "sd_setImage" が正しく作動しません

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/07/06 02:39

編集2020/07/06 02:42

sd_setImageでダウンロードした画像をUIIMageView.imageプロパティに反映させたいです。
PodFileで pod 'FirebaseUI/Storage'をインストールして "xcworkspace"で作業してます。
公式ドキュメントに従って、階層構造のディレクトリに画像を格納することはできて、
コンソール画面からも確認できるのですが、なぜかその画像を sd_setImage メソッドを使ってダウンロードすることができません。

バケットのルールは以下のようにしています。

rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write; } } }

またネイティブプリ内のアップロードコードは関数にして一般化しています。

swift

1func uploadFirebase(data:Data,child:String) { 2 let storage = Storage.storage() 3 let storageRef = storage.reference(forURL: "HogeHoge.com") 4 let postimagesRef = storageRef.child("profileImages") 5 let imagesChildRef = postimagesRef.child("(child).png") 6 let uploadTask = imagesChildRef.putData(data, metadata: nil) { (metadata, error) in 7 guard let metadata = metadata else { 8 return 9 } 10}

そしてダウンロードコードが以下の通りです。

Swift

1func setProfileImageView(userId:String) { 2let storage = Storage.storage() 3let storageRef = storage.reference(forURL: "HogeHoge.com") 4let profileimagesRef = storageRef.child("profileimages") 5let imagesChildRef = profileimagesRef.child("(userId)" + "profile.png") 6let placeholderImage = UIImage(named: "avatar") 7self.profileImageView.sd_setImage(with: imagesChildRef, placeholderImage: placeholderImage) 8print("関数はしっかりと動いてる、しかし画像がダウンロードされない") 9}

ここに質問の内容を詳しく書いてください。

以上のコードで、テストプロジェクトを作ったときには、しっかりと UITableView の UITableViewCell の UIImage.imageプロパティに表示されました。
現在頭を抱えているのが、本番環境で実装をしているのにこちらの思うように動いてくれないことです。

発生している問題・エラーメッセージ

特にありません。 ダウンロードコードの末尾にデバック画面に文字列を出力するようにしているのですが、この文字列は出力されます。 ただし、UIImageView の image プロパティには placeholderImage の画像が出てしまいます。 画像がダウンロードできていないのは、関数の誤作動なのでしょうか。

試したこと

もう一個別のテストプロジェクトを作って本番環境と全く同じ仕様にしたら、しっかりと画像はダウンロードされてシミュレータ上で確認することができます。

補足情報(FW/ツールのバージョンなど)

もしこの問題の解決策をお持ちの方がいらっしゃいましたら、ご教授いただけると幸いです。

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

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

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

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

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

fuzzball

2020/07/06 02:50

「ダウンロードできていない」の根拠は?
fuzzball

2020/07/06 02:59

(ダウンロードするのではなく)self.profileImageViewに適当な画像を設定すると表示されますか?
退会済みユーザー

退会済みユーザー

2020/07/06 03:16 編集

ご連絡ありがとうございます。 profileImageView にデフォルトで画像を入れておいて、UIButton のタッチイベントで画像をダウンロードする仕組みにしてあります。 引数(profileImageView に表示したい画像の名前)はUITextField で 入力しています。タッチイベントの後に、デフォルトで入れておいた画像がUIImage(named: "avatar") に変わってしまうので、関数自体は作動していると見ています。しかし、目的の(引数に入れたPNGの)画像が profileImageView に反映されないので、ダウンロードされていないと認識しています???? 説明不足ですみません????‍♂️
退会済みユーザー

退会済みユーザー

2020/07/06 04:31

fuzzballさん、大変申し訳ございません。 アップロードコードの let postimagesRef = storageRef.child("profileImages") ダウンロードコードの let profileimagesRef = storageRef.child("profileimages") の childパスが「profileImage」と「profileimage」のスペルが厳密に違いました。 統一したらしっかりとダウンロードできました。ありがとうございました。
fuzzball

2020/07/06 04:45

パス生成は共通化しておくのが良さそうですね。
guest

回答1

0

ベストアンサー

解決しました。
アップロードコードの let postimagesRef = storageRef.child("profileImages")
ダウンロードコードの let profileimagesRef = storageRef.child("profileimages")
の childパスが「profileImage」と「profileimage」のスペルが厳密に違いました。
統一したらしっかりとダウンロードできました。

投稿2020/07/06 04:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問