微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义Firebase单元未出现在TableView中

如何解决自定义Firebase单元未出现在TableView中

我正在尝试使用自定义单元格填充TableView,这些自定义单元格中有从Firebase下载的图像。自定义单元格未出现在Tableview中。我相信我使用名为“ posts”的数组配置了单元格,该数组充满了“ TimeLinePost”,但是当我为“ numberOfRows功能0打印“ posts.count”时,出现某处不起作用。我在下载数据方面也可能犯了一个错误。我要弄错的任何帮助将非常感谢。

这是TableView代码,其中包含“ TimeLinePost”类-

 class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    @IBOutlet var table: UITableView?
    var posts = [TimeLinePost]()
    private let storage = Storage.storage().reference()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.table?.register(TableViewCell.nib(),forCellReuseIdentifier: TableViewCell.identifier)
        table?.delegate = self
        table?.dataSource = self
        table?.reloadData()
        
    }
    


    @IBAction func unwindSegue(_ sender: UIStoryboardSegue){
        
    }
    func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        print(posts.count)
        return posts.count
    }
    
    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier,for:indexPath) as! TableViewCell
        cell.configure(with: posts[indexPath.row])
        return cell
    }

}

    class TimeLinePost {
    var image: String
    
    init (image: String) {
        self.image = image
    }
}

这是用于上传数据的代码-

    struct MyKeys {
    static let imagesFolder = "imagesFolder"
    static let uid = "uid"
    static let imagesURL = "imagesURL"
    static let imagesCollection = "imagesCollection"
}

    class uploadViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
    
    var imageDownloadUrl: String?
    
    @IBOutlet weak var photoImageView: UIImageView!
    var original: UIImage!
    private let storage = Storage.storage().reference()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func choosePhoto() {
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
            let picker = UIImagePickerController()
            picker.delegate = self
            picker.sourceType = .photoLibrary
            navigationController?.present(picker,animated: true,completion: nil)
        }
        
    }
    
    func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediawithInfo info: [UIImagePickerController.InfoKey : Any]) {
        self.navigationController?.dismiss(animated: true,completion: nil)
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            photoImageView.image = image
            original = image
            
        }
        
        

    }
    
    @IBAction func uploadPhoto(_ sender: Any) {

        guard let image = photoImageView.image,let data = image.jpegData(compressionQuality: 1.0)
            else {
                print("Error")
                return
                
        }
        
        let imageName = UUID().uuidString
        
        let imageReference = Storage.storage().reference().child("images").child(imageName)
        imageReference.putData(data,Metadata: nil) { (Metadata,error) in
            guard error == nil else {
                print("Failed to upload")
                return
            }
            
            imageReference.downloadURL{ (url,error) in
                if let error = error {
                    print("Error")
                    return
                }
                guard let url = url else {
                    print("Error")
                    return
                }
                
                
                let dataReference = Firestore.firestore().collection(MyKeys.imagesCollection).document()
                let documentUid = dataReference.documentID
                let urlString = url.absoluteString
                
                let data = [
                    MyKeys.uid: documentUid,MyKeys.imagesURL: urlString,]
                
                dataReference.setData(data) { (error) in
                    if let error = error {
                        print("Error:\(error)")
                        return
                    }
                    
                    UserDefaults.standard.set(documentUid,forKey: MyKeys.uid)
                    
                    
                    
                    
}

}
}
}
}

这是我的自定义单元格的代码-

 class TableViewCell: UITableViewCell {
    
    @IBOutlet var imagePost: UIImageView!
    
    static let identifier = "TableViewCell"
    
    static func nib() -> UINib {
        return UINib(nibName: "TableViewCell",bundle: nil)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
       
        
    }

    override func setSelected(_ selected: Bool,animated: Bool) {
        super.setSelected(selected,animated: animated)

        // Configure the view for the selected state
    }
    
    func configure(with posts: TimeLinePost) {
        self.imagePost.image = UIImage(named: posts.image)
    }
    func downloadImage(){
        
        
        guard let uid = UserDefaults.standard.value(forKey: MyKeys.uid) else {
            print("Error1")
            return
        }
        
        let query = Firestore.firestore().collection(MyKeys.imagesCollection).whereField(MyKeys.uid,isEqualTo: uid)
        
        query.getDocuments { (snapshot,error) in
            if let error = error {
                print("Error2")
                return
            }
            guard let snapshot = snapshot,let data = snapshot.documents.first?.data(),let urlString = data[MyKeys.imagesURL] as? String,let url = URL(string: urlString)  else {
                print("Error3")
                return
            }
            let resource = ImageResource(downloadURL: url)
            self.imagePost.kf.setimage(with: resource,completionHandler: { (result) in
                switch result {
                case .success(_):
                    print("Success")
                    return
                case .failure(_):
                    print("Error4")
                    return
                }
                
                
            })
        }
        
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。