SDWebImage无法使用Firebase存储图像下载

问题描述 投票:1回答:6

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

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

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

下面是我的鳕鱼ewhixh不能正常工作我的应用程序。

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

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

}];

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

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

ios objective-c firebase firebase-storage sdwebimage
6个回答
1
投票

我使用了firebase withSDWebImage,您可以使用以下方法进行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

希望这会对你有所帮助。


4
投票

FirebaseUi已经为SDWebImage提供了自己的小扩展。

只需在Podfile中添加以下pod即可

pod'FirebaseUI / Storage'

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

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

希望这会帮助你。


3
投票

我通过实现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


1
投票
  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
            //...
        })
}

0
投票

别忘了像这样导入SDWebImage模块(Swift)

@import SDWebImage

或者对于Obj-C

#import <SDWebImage/UIImageView+WebCache.h>

0
投票

对于Swift 4(完美工作)

请先安装这个PODS:

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)
© www.soinside.com 2019 - 2024. All rights reserved.