Ich arbeite an einer Social Media App. Ich habe die Profilseite erstellt. Ich habe es mit meiner Firebase-Datenbank verbunden. Aber ich möchte Profil Bild aus der Datenbank geladen werden.Firebase gibt keine URL an Swift zurück
In meiner Datenbank gibt es eine Profilbild-URL (die Firebase-Speicher-URL ist) und ich möchte es aus der Datenbank abrufen und das Bild auf dem Profilbild darstellen.
Und auch ich habe 3 Aktion Anfragen erstellt. Wenn der Benutzer auf die verfügbaren Optionen für Foto 3 klickt.
wählen neues Foto aus der Galerie
nehmen neue Fotokamera mit
anzeigen Foto
wegen, dass ich auch mein Bild möchte auf einen anderen
hier Ansicht übergeben werden ist ein Code :
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
}
})
}
})
})
}
}
Können Sie uns Ihre DB-Struktur zeigen? Wird Ihr observeSingleEvent-Trigger auch ausgelöst? – Christian
Geben Ihre Druckanweisungen die erwarteten Werte aus? Was ist das Problem hier? Sie sollten Ihr Problem und Ihre Frage deutlicher machen. –
Meine Druckanweisungen geben null zurück. Ich erwähnte es auch –