无法将 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 中 的相关文章

  • iOS 中系统日期更改后如何更改带有日期的标签?

    我有一个简单的查询 但不知道该怎么做 这就是我想要实现的目标 1 我有一个带有今天日期的 UILabel 即 29 04 12 2 在午夜 我希望该标签自行更新为 30 04 12 而无需更改视图或按任何内容 这是第2步 我不知道该怎么做
  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • Firestore 引用创建“TypeError:将循环结构转换为 JSON”

    我在 Vue JS 应用程序中使用 Firebase 的 Firestore firebase 5 8 0 vue firestore 0 3 16 当我尝试获取具有引用另一个文档的字段 Firestore 中的引用类型 的文档时 出现以下
  • 设置UITextField的光标位置

    我查看了单点触控示例并尝试过 var range new NSRange selectionStart 1 NumberTextField SelectedTextRange IndexedRange GetRange range 但这会在
  • iOS - 在 UITabBar 上方获取所需的阴影

    我试图让我的标签栏阴影看起来像这张图片中看到的那样 这样做的最佳方法是什么 我正在使用 Objective C Thanks 您可以使用以下代码为任何 UI 对象提供阴影 tabBar layer shadowOffset CGSize w
  • UIAlertAction 处理程序在延迟后运行

    我正在尝试将 UIAlertViews 更改为 UIAlertControllers 我为此设置了这个操作 UIAlertAction undoStopAction UIAlertAction actionWithTitle Undo St
  • 是否可以对 UILabel 的文本颜色变化进行动画处理? [复制]

    这个问题在这里已经有答案了 UIView animateWithDuration 5 animations myLabel textColor UIColor redColor 标签文本颜色立即改变 Try this UIView tran
  • iOS5 和 Facebook API

    我想将我的应用程序与 Facebook 集成并从 github 下载 Facebook ios sdk 但是 该 sdk 适用于 Xcode 4 0 代码库 我正在使用 Xcode 4 2 for iOS 5 beta 5 应用程序 是否有
  • 使用基于 Cookie 的身份验证的 Capacitor iOS

    我正在使用 Capacitor v3 NextJS 静态导出和 Django 后端基于生产网站构建 iOS 应用程序 当前的后端身份验证方案通过 cookie 使用 Django 会话 并通过 cookie 设置 CSRF 令牌 应用程序可
  • 使用什么来移动 UIView self.frame 或 self.transform 属性?

    这个问题我有点困惑 我知道我可以改变观点self frame origin 但我发现有一个名为 变换 的属性 我认为这是用于在屏幕上移动我的视图等 也许我有点不明白 所以我想知道 我必须使用哪个房产来搬家UIView 或者它的子类 另一个类
  • 在后台运行 URL 请求

    我想在一定的时间间隔内发出 url 请求 例如 每 10 分钟应用程序应该发出一次 url 调用并获取一些 json 数据 应用程序在后台运行时应该能够执行此操作 这可以做到吗 如果是这样 这是否违反 Apple 服务条款 有什么限制吗 i
  • 增量后清除推送通知徽章

    我正在研究 iPhone 中的推送通知 当我收到推送通知时 它在我的应用程序图标上显示 1 下次显示 2 3 4 如果我打开应用程序 它是 0 下次它应该是 1 2 3 4 但它显示最后一个数字和 1 我想在打开应用程序后重置推送通知徽章
  • 带有图像的 UITableView 滚动非常慢[重复]

    这个问题在这里已经有答案了 可能的重复 带图像的表格视图 加载和滚动缓慢 https stackoverflow com questions 4071497 table view with images slow load and scro
  • Xcode 服务器 ibtool 构建失败

    我一直在研究使用 Xcode Server 进行 CI 我已经解决了一些问题 但现在有一个问题困扰着我 构建似乎工作正常 但在测试阶段挂起 并在日志底部生成以下内容 2015 11 25 14 44 45 650 xcodebuild 58
  • FirebaseAnimatedList 实时更改内容

    我想知道如何使用新查询 更改路径的新内容来重建 FirebaseAnimatedList new Flexible child new FirebaseAnimatedList query query sort DataSnapshot a
  • 游戏中心玩家显示名称在沙盒中始终为“我”

    我使用用户的游戏中心显示名称和玩家 ID 来维护他们在我的服务器上的个人资料 当我进行测试时 一切似乎都正确执行 但我的沙箱帐户的用户显示名称显示为 Me 而不是附加到我的帐户的显示名称 Billybobbo 这应该在沙盒模式下发生吗 Co
  • iOS 开发:如何强制 UIWebView 加载 Facebook 的非移动版本?

    我正在深入研究 iOS 开发 当我尝试在 UIWebView 中加载特定的 Facebook 粉丝页面时 它会加载该网站的移动版本 该版本仅加载粉丝页面的墙 而不是我需要加载的特定选项卡 在我的应用程序的 iPad 版本中 UIWebVie
  • iOS 11 中的密码自动填充快速输入栏

    iOS 11 中引入了一项新功能 应用程序密码自动填充 此功能允许用户直接从键盘快速输入栏使用其应用程序中保存的密码 https techcrunch com 2017 06 08 ios 11s new password autofill
  • Firebase Web 与 iOS 和 Android 版本的 React Native 项目

    我是应用程序开发新手 这让我很困惑 我有一个用react native 创建的项目 我希望它可用于android 和iOS 我看过一些关于如何为 React Native 后端创建 Firebase 数据库的教程 其中一些在构建应用程序时选
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji

随机推荐