我正在尝试使用firebase编辑用户个人资料,当用户转到他们的个人资料时,会有一个编辑按钮,将他们带到新的viewcontroller来编辑他们的个人资料。我尝试下面的代码只有在我注销并重新登录时才有效。有没有办法刷新用户配置文件而无需重新启动我的应用程序?感谢。
// EditprofleVC.swift
import UIKit
import Firebase
import FirebaseAuth
import FirebaseStorage
import FirebaseDatabase
class EditprofleVC: UIViewController{
var storageRef: StorageReference!
var databaseRef: DatabaseReference!
@IBOutlet weak var userNameTxt: UITextField!
@IBOutlet weak var profileImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
storageRef = Storage.storage().reference()
databaseRef = Database.database().reference()
}
@IBAction func saveProfileData(_ sender: Any) {
updateUsersProfile()
}
func updateUsersProfile(){
if let userID = Auth.auth().currentUser?.uid {
let storageItem = storageRef.child("urlToImage").child(userID)
guard let image = profileImageView.image else
{return}
if let newImage = UIImagePNGRepresentation(image) {
storageItem.putData (newImage,metadata:nil,completion: { (metadata,error) in
if error != nil {
print (error)
return
}
storageItem.downloadURL(completion:{ (url,error) in
if error != nil {
print (error!)
return
}
if let profilePhototoURL = url?.absoluteString{
guard let newUserName = self.userNameTxt.text else {return}
let newValuesForProfile =
["urlToImage": profilePhototoURL,
"full name": newUserName]
self.databaseRef.child ("users").child(userID).updateChildValues(newValuesForProfile,withCompletionBlock: { (error, ref) in
if error != nil {
print (error!)
return
}
print (" profile successfully upated" )
})
}
})
})
}
}
}
}
class profileVC:UIViewController {
var user = [User]()
var userID: String!
@IBOutlet weak var profileNameLbl: UILabel!
@IBOutlet weak var businessType: UILabel!
@IBOutlet weak var profileImage: UIImageView!
let storageRef = Storage.storage().reference()
let databaseRef = Database.database().reference()
override func viewDidLoad() {
super.viewDidLoad()
setupProfile()
}
func setupProfile() {
let uid = Auth.auth().currentUser?.uid
databaseRef.child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
if let dict = snapshot.value as? [String: AnyObject]
{
self.profileNameLbl.text = dict["full name"] as? String
self.businessType.text = dict["Business Type"] as? String
if let profileImageurl = dict["urlToImage"] as? String
{
let url = URL(string: profileImageurl)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, responds, error) in
if error != nil{
print(error!)
return
}
DispatchQueue.main.async{
self.profileImage?.image = UIImage(data: data!)
}
}).resume()
}
}
})
}
}