arrays - 如何将源自 Firebase、转换为 UIImage 的数据存储到 UIImage 数组?
问题描述
我正在尝试检索从数据库中保存的图片(在这种情况下,我硬编码了我想要从数据库中获取的确切图片)。我UIImage
启动了两个变量:imageView
和rawImage
. imageView 正在使用SDWebImage
fromFirebaseUI
加载图像,但我不知道如何将其保存到 UIImage 数组中。
rawImage 正在从 Firebase 的确切图像的路径中获取数据。我正在将它转换为 UIImage,但是当我想将它附加到我的 UIImage 数组时,应用程序崩溃了。
class GalleryViewController:UIViewController{
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var rawImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
view.addVerticalGradientLayer(topColor: primaryColor, bottomColor: secondaryColor)
self.tabBarController?.tabBar.isHidden = true
retrievePicture()
}
func retrievePicture()
{
guard let user_email = Auth.auth().currentUser?.email else { return }
let storageRef = Storage.storage().reference()
// Reference to an image file in Firebase Storage
let reference = storageRef.child("\(user_email)").child("/top").child("1.jpg")
// UIImageView in your ViewController
let imageView: UIImageView = self.imageView
// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")
//UploadViewController.Clothing.top_images.append(<#UIImage#>)
// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)
// this is the code for the rawImage portion I described above
reference.getData(maxSize: 1 * 1024 * 1024) { data, error in
if let error = error {
print("Error \(error)")
} else {
let picture = UIImage(data: data!)
UploadViewController.Clothing.top_images.append(picture!)
}
}
// loading the image to the rawImage imageview
rawImage.image = UploadViewController.Clothing.top_images[0]
}
}
解决方案
您忽略了强制展开选项,我建议您删除!
使用以避免崩溃,改用以下
reference.getData(maxSize: 1 * 1024 * 1024) { data, error in
guard let data = data else {
print(error?.localizedDescription ?? "Check remote url or service")
return
}
if let picture = UIImage(data: data) {
UploadViewController.Clothing.top_images.append(picture)
} else {
print("Invalid image data\n\(String(data: data, encoding: .utf8))")
}
}
或遵循 if 语句是安全的
if error == nil && data != nil, let picture = UIImage(data: data!) {
UploadViewController.Clothing.top_images.append(picture)
}
您也可以尝试不带斜杠的路径,如下所示:
let reference = storageRef.child("\(user_email)/top/1.jpg")
推荐阅读
- java - 自定义异常类正确处理异常
- python - 使用带有水平线的熊猫绘制矩形补丁
- java - 为什么 equalsIgnoreCase() 不只使用 toLowerCase() ?
- android - No view found for id 0x7f080032 for fragment
- c# - 如何检测应用程序中的pri资源是否可用
- azure - add new custom metrics like "Memory Usage" in Azure webjob's Appinsights
- ajax - why does $.post() work but not fetch work
- java - Android 应用程序在加载时崩溃
- unity3d - unity3d 从 web 加载 spritesheet 和内存问题
- python - Python 等待 Slurm 工作?