【问题标题】:SDWebImage not working with Firebase storage image downloadSDWebImage 不适用于 Firebase 存储映像下载
【发布时间】:2017-06-23 03:27:57
【问题描述】:

我正在处理一个使用 Firebase 存储 API 并从 Firebase 获取一些图像的项目。

使用NSData 逻辑与从服务器下载图像并将其显示到我的应用程序中正常工作。

但同样的事情不能通过SDWebImage SDK 工作,因为我需要在 SDWebImage 中结合 firebase url,因为 firebase 文档还提到绑定它并用于下载图像。通过 SDWebImage 存储

以下是我的 cod ewhixh 无法运行我的应用程序。

FIRStoragereference *ref = [[FIRStorage storage] referenceWithPath:myfilepath];

[Cell.imgDetail sd_setImageWithStorageReference:ref placeholderImage:nil completion:^(UIImage *image,

}];

错误:在 sd 网络图像中找不到方法

请帮帮我,我被困在这里了。

【问题讨论】:

    标签: ios objective-c firebase firebase-storage sdwebimage


    【解决方案1】:

    我通过实现 SDWebImage 的其他方法解决了这个问题

    SDWebImageManager.shared().downloadImage(with:"Your Firebase Url", options: .refreshCached, progress: nil, completed: { (image, error, cache, isDownloader, url) in
        if image != nil { 
            YourImageView.image = image       
         }
    })
    

    这是在 Swift 中,但您可以在 Objective-C 中实现它。

    这是一个链接:
    https://github.com/rs/SDWebImage/issues/845

    【讨论】:

    • 对不起,但它不能在我的最后工作,因为我有火基地的 ref 没有直接的 url 所以。
    • @BhaviDev 你知道如何通过更新缓存来做到这一点
    • 您需要先将您的 Firebase 存储 URL 转换为下载 URL。
    【解决方案2】:

    我已经使用了带有 SDWebImage 的 firebase,您可以使用以下方法进行 StorageReference

    此方法需要为 UIImageView 添加一个类别文件

    #import "UIImageView+FirebaseStorage.h"
    

    你可以在FireBaseUIIOS找到这个文件

    FIRStorageReference *storageRef = [[FIRStorage storage]
                                               referenceWithPath:[NSString stringWithFormat:@"/Folder/images/%@",<IMAGE_NAME>]];
    
    
            [cell.imgDetail sd_setImageWithStorageReference:storageRef
                                           placeholderImage:nil
                                                 completion:^(UIImage *image,
                                                              NSError *error,
                                                              SDImageCacheType
                                                              cacheType,
                                                              FIRStorageReference *ref) {
                                                     if (error != nil) {
                                                         NSLog(@"Error loading image: %@", error.localizedDescription);
                                                     }
                                                 }];
    

    您也可以使用上述@Shafi 的 SDWebImage 方法,但为此您需要提供完整的 firebase 存储 URL,如下所示。

    完整网址:storageRef.fullPath

    希望对你有帮助。

    【讨论】:

    • 没有提到类,它仍然给出同样的错误。
    • 请正确检查提供的链接并按照指示执行链接:github.com/firebase/FirebaseUI-iOS/tree/master/… 在您的项目中添加此文件夹或类,而不是在 POD 文件中,它将按预期工作。
    【解决方案3】:

    不要忘记像这样导入 SDWebImage 模块(Swift)

    @import SDWebImage
    

    或者对于 Obj-C

    #import <SDWebImage/UIImageView+WebCache.h>
    

    【讨论】:

    • 对不起,它已经在那里了,仍然找不到它的显示方法。
    【解决方案4】:

    FirebaseUi 为 SDWebImage 提供了他们自己的小扩展。

    只需在您的 Podfile 中添加以下 pod

    pod 'FirebaseUI/Storage'

    并使用以下代码行通过 Firebase 存储参考缓存图像。

    // Load the image using SDWebImage
    [imageView sd_setImageWithStorageReference:reference placeholderImage:placeholderImage];
    

    希望这会对你有所帮助。

    【讨论】:

      【解决方案5】:
      1. BridgingHeader.h 文件添加到您的项目中:
      #import <FirebaseStorageUI.h>
      
      1. 那么在你的课堂上:
      import UIKit
      import FirebaseStorageUI // <-- don't forget to import this
      
      func getImage() {
      
          let reference = storageRef.child(imageFileName)
      
          myImageView.sd_setImage(with: reference, placeholderImage: UIImage(named: "bg"), completion: { (image, error, cacheType, storageRef) in
                  //...
              })
      }
      

      【讨论】:

        【解决方案6】:

        对于 Swift 4(完美运行)

        请先安装此 Pod:

        pod 'Firebase/Storage'
        pod 'SDWebImage', '~> 4.0'
        pod 'FirebaseUI/Storage'
        

        然后在你的 Xcode 9+ 中:

        import FirebaseStorage
        import SDWebImage
        import FirebaseUI
        
        
        let reference = Storage.storage().reference(withPath: "your image path")
        let imageView: UIImageView = self.imageView
        imageView.sd_setImage(with: reference)
        

        【讨论】:

          猜你喜欢
          • 2023-03-22
          • 2017-10-21
          • 2019-03-05
          • 2018-10-31
          • 2018-01-09
          • 2017-09-23
          • 2016-12-28
          • 1970-01-01
          • 2017-10-01
          相关资源
          最近更新 更多