无法将 Firebase 存储图像快速显示到 CollectionView 中

2024-01-23

我需要一些帮助,我一直在互联网上寻找帮助,以在 CollectionView 中显示我的 firebase 存储图像。我正在使用 UIImagepicker 将图像上传到 firebase,但它们没有显示在我的 CollectionView 中。我尝试了所有不同类型的方法,但没有任何效果。

这是我的 PhotoVC

class PhotoVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverPresentationControllerDelegate {

    @IBOutlet weak var imageGallery: UICollectionView!

    @IBOutlet weak var bigImage: UIImageView!
    @IBAction func addPhotoButtonPressed(_ sender: Any) {

        /*  let imagePicker = UIImagePickerController()
            imagePicker.sourceType = .photoLibrary
            imagePicker.allowsEditing = true
            imagePicker.delegate = self

            // iPad Settings
            imagePicker.modalPresentationStyle = .popover
            imagePicker.popoverPresentationController?.delegate = self
            imagePicker.popoverPresentationController?.sourceView = view
            //view.alpha = 0.5
        */

        present(imagePicker, animated: true, completion: nil)
    }

    @IBOutlet weak var addPhotoButton: UIButton!

    var imageArray = [Img]()
    var storage = FIRStorage.storage().reference()
    var database = FIRDatabase.database().reference()
    var ref = FIRDatabase.database().reference(withPath: "images")
    var refHandle: UInt!
    var userID: String!
    let vc = PhotoCell()
    var imagePicker: UIImagePickerController!
    var imageSelected = false
    var selectedImage: UIImage!
    var img: Img!

    static var imageCache: NSCache<NSString, UIImage> = NSCache()    

    override func viewDidLoad() {
        super.viewDidLoad()

        imageGallery.delegate = self
        imageGallery.dataSource = self
        imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.allowsEditing = true

        FIRDatabase.database().reference().child("posts").observe(.value, with: {(snapshot) in
            if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {

                self.imageArray.removeAll()

                for data in snapshot {
                     print(data)
                    if let postDict = data.value as? Dictionary<String, AnyObject> {
                        let key = data.key
                        let post = Img(postKey: key, postData: postDict)
                        print(postDict)

                        self.imageArray.append(post)
                    }
                }
            }
            self.imageGallery.reloadData()
        })


        loadImages()
        print(imageArray.count)
    }


    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true)
    }


    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        if let image = info[UIImagePickerControllerEditedImage] as? UIImage {

            selectedImage = image

            imageSelected = true

        } else {

            print("A valid image wasnt selected")
        }
        imagePicker.dismiss(animated: true, completion: nil)

        guard imageSelected == true else {

            print("An image must be selected")

            return
        }

        if let imgData = UIImageJPEGRepresentation(selectedImage, 0.2) {

            let imgUid = NSUUID().uuidString

            let metadata = FIRStorageMetadata()

            metadata.contentType = "image/jpeg"

            FIRStorage.storage().reference().child("post-pics").child(imgUid).put(imgData, metadata: metadata) { (metadata, error) in

                if error != nil {

                    print("image did not save to firebase storage")

                } else {

                    print("uploded to firebase storage")

                    let downloadURL = metadata?.downloadURL()?.absoluteString

                    if let url = downloadURL {

                     //   self.sendToFirebase(imgUrl: url)
                    }
                }
            }
        }
    }


    func loadImages() {

        let url = URL(string: "http://cdn.bleacherreport.net/images/team_logos/328x328/denver_broncos.png")!
        bigImage.kf.setImage(with: url)

    }


    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return imageArray.count
    }

        func collectionView(_ collectionView: UICollectionView,
                            cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let post = imageArray[indexPath.row]

            if let cell = imageGallery.dequeueReusableCell(withReuseIdentifier: "image", for: indexPath) as? PhotoCell {

                cell.configCell(post: post)



                return cell

            } else {

                return PhotoCell()
            }

        }

这是我的视图单元格

PhotoCell: UICollectionViewCell {

    var photoGallery: UIImageView!

    override func awakeFromNib() {
        photoGallery = UIImageView(frame: contentView.frame)
        photoGallery.contentMode = .scaleAspectFill
        photoGallery.clipsToBounds = true
        contentView.addSubview(photoGallery)
    }

    var img: Img!
    var likesRef: FIRDatabaseReference!

    let currentUser = KeychainWrapper.standard.string(forKey: "uid")

    func configCell(post: Img, img: UIImage? = nil) {
        self.img = post

        if img != nil {
            self.photoGallery.image = img
        } else {
            let ref = FIRStorage.storage().reference(forURL: post.postImg)
            ref.data(withMaxSize: 100 * 10000, completion: { (data, error) in
                if error != nil {
                    print(error!)
                } else {
                    if let imgData = data {
                        if let img = UIImage(data: imgData) {
                            self.photoGallery.image = img
                        }
                    }
                }
            })
        }

这是我的模型

class Img {

    private var _postImg: String!
    private var _postKey:  String!
    private var _postRef: FIRDatabaseReference!

    var postImg: String {
        get {
            return _postImg
        } set {
            _postImg = newValue
        }
    }

    var postKey: String {
        return _postKey
    }

    init(imgUrl: String) {
        _postImg = imgUrl      
    }

    init(postKey: String, postData: Dictionary<String, AnyObject>) {
        _postKey = postKey

        if let postImage = postData["imageUrl"] as? String {
            _postImg = postImage
        }

        _postRef = FIRDatabase.database().reference().child("posts").child(_postKey)
    }

    func toAnyObject() -> [String: Any] {
        return ["imageUrl":_postImg]
    }
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将 Firebase 存储图像快速显示到 CollectionView 中 的相关文章

  • 删除整个数据库太容易了

    有没有办法保护数据库不被删除 我的意思是单击根节点旁边的 x 非常容易 这会破坏整个应用程序并造成巨大的混乱 如何应对这种脆弱性 EDIT 假设我有两个 Firebase 帐户 一个用于测试 另一个用于启动的应用程序 我经常登录和退出以使用
  • 如何读取 Xcode 6.1 Instruments .trace 文件?

    我一直在尝试阅读 trace文件 我使用生成的custom仪器模板 仪器 自动机 分配 Leaks using 仪器 https developer apple com library mac documentation Developer
  • 迭代嵌套的 firebase 对象 - Javascript

    如何迭代嵌套的 firebase 对象 Publications Folder1 hdgjg76675e6r Name Author hdgjdsf3275e6k hd345454575e6f Folder2
  • 使用 Swift 创建 NSAlert

    我有在 Objective C 中创建和 NSAlert 的代码 但我现在想在 Swift 中创建它 该警报旨在确认用户想要删除文档 我想要 删除 按钮来运行删除功能 而 取消 按钮只是为了消除警报 我怎样才能用 Swift 写这个 NSA
  • Flutter Firebase 身份验证 currentUser() 返回 null

    这是关于 Flutter Firebase 身份验证插件的 我试图在创建新用户后发送验证电子邮件 但 sendEmailVerification 内部使用 currentUser 这对我来说似乎是一个错误 但为了以防万一 我在 stacko
  • 在 Firebase 中为 TextView Swift 保存字体和大小的方法是什么

    我想在 Firebase 中保存 Swift 中 TextView 的字体 大小和对齐方式 这样我就可以在另一个视图中调用它 我只能将颜色保存在 Firebase 中 这是显示我是如何做到的的代码 IBAction func SendBtn
  • 如何在 Safari 上打开本地 html 文件?

    我想打开本地 html 文件Safari集成到我的Swift 3应用 我知道如何使用网址来做到这一点 这是我用来执行此操作的代码 let encodedString url addingPercentEncoding withAllowed
  • 通过应用程序组在应用程序之间通信和保存数据

    iOS 8 昨天发布了一个有关应用程序组的新 API 以前在应用程序之间共享数据和通信有点混乱 我相信这正是应用程序组旨在纠正的问题 在我的应用程序中 我启用了应用程序组并添加了一个新组 但我找不到任何有关如何使用它的文档 文档和 API
  • Mapkit 在 IOS 13 中使用过多的 CPU

    最近 在一些用户更新到 iOS 13 x 后 我的 iOS 应用程序开始频繁崩溃 在 iOS 12 x 中没有出现该问题 我正在使用 Mapkit 渲染一些 MKPolygons 和 MKPolylines MKPolylines 被删除并
  • 从 plist 文件中解码数据

    我丢失了在 Macbook Air 上用 Textwrangler 编写的文本文件中的一些数据 我在扩展名为 plist 的文件中找到了其中一些 文件是用 xml 编写的 如下所示
  • 返回一个dispatch_async获取的变量[重复]

    这个问题在这里已经有答案了 基本上 一个方法需要返回一个在dispatch async中获取的NSDictionary 这是我尝试过的 NSDictionary fetchNSDictionary dispatch queue t Queu
  • Swift 3 中数组的 indexOf(_:) 方法的替换

    在我的项目 用 Swift 3 编写 中 我想使用从数组中检索元素的索引indexOf 方法 存在于 Swift 2 2 中 但我找不到任何替代方法 Swift 3 中是否有任何好的替代方法或类似的方法 Update 我忘记提及我想在自定义
  • 以编程方式检测应用程序是否正在设备或模拟器上运行

    我想知道我的应用程序在运行时是在设备还是模拟器上运行 有没有办法检测到这一点 原因是用模拟器测试蓝牙 api http volcore limbicsoft com 2009 09 iphone os 31 gamekit pt 1 woo
  • 如何将数据从一个视图传递到下一个视图?

    我正在制作一个下载排队系统来下载视频 处理下载的排队代码位于另一个视图控制器中 现在我的问题是如何将下载的 URL 传递到另一个视图而不推送到另一个视图控制器 如下所示 ViewConntroller View ViewConntrolle
  • 如何在 swift 中以编程方式使用坐标打开地图应用程序?

    我想在地图应用程序中打开纬度和经度 我尝试了这段代码HERE https stackoverflow com questions 12504294 programmatically open maps app in ios 6 func g
  • Audiokit 修剪音频

    我正在制作音频编辑应用程序 我想修剪我的音频 对于音频编辑 我使用 AudioKit 框架 但我在教程和示例中找不到如何使用此框架修剪音频 异步导出允许设置开始和结束样本 https github com AudioKit AudioKit
  • 禁用 iPhone 4S / 新 iPad 键盘上的听写按钮

    我们的应用程序是一个医疗保健应用程序 我们的应用程序中有一个符合 HIPAA 标准的语音识别器 所有听写都可以通过它进行 医院不希望医生意外开始与不符合 HIPAA 标准的 Nuance Dragon 服务器进行对话 因此 我正在寻找可以抑
  • 在completionHandlers中存储值 - Swift

    我正在创建一个completionHandler它返回一个字典 但是当我在另一个类中调用这个方法时 它的值是零 func fetchLatestPosts completionHandler responseDict NSDictionar
  • Firebase 移动应用配额数量

    我向 firebase 项目添加了一个新应用程序 我已经有 66 个应用程序 33 个 android 33 个 ios 当我点击添加应用程序时出现的错误是 发生意外错误 原因 资源已耗尽 例如检查配额 根据他们的文档 https fire
  • 我如何用 javascript/jquery 进行两指拖动?

    我正在尝试创建当有两个手指放在 div 上时拖动 div 的功能 我已将 div 绑定到 touchstart 和 touchmove 事件 我只是不确定如何编写这些函数 就像是if event originalEvent targetTo

随机推荐