私はソーシャルメディアアプリを開発中です。プロファイルページを作成しました。 Firebaseデータベースに接続しました。しかし、私はプロファイルの画像をデータベースからロードしたい。FirebaseがSwiftにURLを返さない
私のデータベースには、プロファイルpic url(firebase storage url)があります。データベースから取得して、プロファイルの画像を表したいと思います。
また、私は3つのアクションリクエストを作成しました。ユーザーが写真をクリックすると、利用可能な3つのオプションが表示されます。私も私のイメージはここに別のビュー
に渡すことがしたいことのため
ギャラリー
から新しい写真を選択して、カメラ
ショーの写真
を使用して新しい写真を撮るいくつかのコードです:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
profilePic.layer.cornerRadius = profilePic.frame.size.width/2
profilePic.clipsToBounds = true
getImages()
}
func getImages(){
if FIRAuth.auth()?.currentUser?.uid==nil{
self.performSegue(withIdentifier: "logOutSegue", sender: self)
} else {
let uid = FIRAuth.auth()?.currentUser?.uid
databaseRef.child("Users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
if let dict = snapshot.value as? NSDictionary{
let ImageUrl = dict["Profpic"] as? String
print(ImageUrl)
let url = URL(string: ImageUrl!)
print(url)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
if error != nil{
print(error?.localizedDescription)
return
}
DispatchQueue.main.async {
self.profilePic?.image = UIImage(data: data!)
}
}).resume()
}
})
}
}
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
self.profilePic.image = image
picker.dismiss(animated: true, completion: nil)
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true, completion: nil)
}
@IBAction func changePic(_ sender: Any) {
let imagePickerController = UIImagePickerController()
imagePickerController.delegate = self
let actionSheet = UIAlertController(title: "Foto Kaynağı", message: "Bir kaynak seçin", preferredStyle: .actionSheet)
actionSheet.addAction(UIAlertAction(title: "Kameranla yeni bir fotoğraf çek", style: .default, handler: { (action:UIAlertAction) in
if UIImagePickerController.isSourceTypeAvailable(.camera){
imagePickerController.sourceType = .camera
self.present(imagePickerController, animated: true, completion: nil)
}
else {
print("Camera not available")
}
}))
actionSheet.addAction(UIAlertAction(title: "Galeriden yeni bir fotoğraf seç", style: .default, handler: { (action:UIAlertAction) in
imagePickerController.sourceType = .photoLibrary
self.present(imagePickerController, animated: true, completion: nil)
}))
actionSheet.addAction(UIAlertAction(title: "Fotoğrafı Göster", style: .default, handler: { (action:UIAlertAction) in
self.performSegue(withIdentifier: "showProfilePic", sender: self)
}))
actionSheet.addAction(UIAlertAction(title: "Geri Dön", style: .cancel, handler: nil))
self.present(actionSheet, animated: true,completion: nil)
}
@IBAction func saveClicked(_ sender: Any) {
let imageName = NSUUID().uuidString
let storedImage = storageRef.child("Profile Pictures").child(imageName)
if let uploadData = UIImagePNGRepresentation(self.profilePic.image!){
storedImage.put(uploadData, metadata: nil, completion: { (metadata, error) in
if error != nil {
print(error?.localizedDescription)
return
}
storedImage.downloadURL(completion: { (url, error) in
if error != nil {
print(error?.localizedDescription)
return
}
if let urlText = url?.absoluteString{
self.databaseRef.child("Users").child((FIRAuth.auth()?.currentUser?.uid)!).updateChildValues(["ProfPic" : urlText], withCompletionBlock: { (error, ref) in
if error != nil{
print(error?.localizedDescription)
return
}
})
}
})
})
}
}
DB構造を表示できますか? observeSingleEventトリガーもですか? – Christian
あなたのプリントステートメントが期待値を出力していますか?ここでの問題は何ですか?問題と疑問をより明確にする必要があります。 –
私のprintステートメントはnilを返します。私もそれを言った –