【问题标题】:How to add hundreds of image data using realm with swift如何使用领域快速添加数百个图像数据
【发布时间】:2019-11-09 18:58:59
【问题描述】:

我是 Realm 的新手,在这里对 swift 有一点经验。我正在尝试自己编写程序。我想在基于领域的数据库中保存图像数据和有关此图像的一些信息。如果我必须像这样一张一张地添加每张图片,我会很痛苦:

    func loadimageData(){
    if itemimageResult!.count > 0 {
        return
    }
    let imageURL1 = Bundle.main.url(forResource: "ShakerColor1", withExtension: "png")!
    let imageURL2 = Bundle.main.url(forResource: "ShakerColor2", withExtension: "png")!
    let imageURL3 = Bundle.main.url(forResource: "ShakerColor3", withExtension: "png")!
    let imageData1 = try! Data(contentsOf: imageURL1)
    let imageData2 = try! Data(contentsOf: imageURL2)
    let imageData3 = try! Data(contentsOf: imageURL3)
    let putImage1 = itemImage(value:[2,imageData1])
    let putImage2 = itemImage(value:[2,imageData2])
    let putImage3 = itemImage(value:[2,imageData3])
    try! realm.write{
        realm.add(putImage1)
        realm.add(putImage2)
        realm.add(putImage3)
    }
}

我想知道是否还有其他更好的方法。

非常感谢您的宝贵时间。

【问题讨论】:

  • 你知道需要提前添加到数据库的图片数量或图片名称吗?
  • 我可以重命名它们。我的问题是我还需要将相关数据存储到图像中,例如如果这张图片是猫,它需要存储 "cateName","catBrade","catSex" 。我知道我需要添加多少张图片。
  • 如果您事先知道需要添加的图像数量,那么您可以创建一个 struct 并定义所需的属性并将数据存储在一个数组中。然后循环遍历数组以将所有记录添加到数据库中。
  • 该代码肯定可以工作,并且是向 Realm 写入数据的正确结构。不过,第一个问题是您正在从捆绑包中读取图像。您是否打算以这种方式存储它们?如果是这样,为什么要在捆绑包中提供它们但还要将它们写入领域(这是重复的)?另外,我们不知道itemImage(value:[2,imageData1]) 做了什么,所以应该解释一下。 itemImage 是一个类吗?
  • 是的,itemImage 是一个类。如果我不将它们存储在捆绑中,我应该从哪里读取这些图像?我很了解这一点。

标签: swift database realm


【解决方案1】:

这是一个答案,但不是唯一的答案。如果你有一个图像列表并且你想将它们写入领域,这就是我会做的。

从一个存储图像数据的类开始。您可以选择添加图片标题或图片的内容等。

class ImageClass: Object {
    @objc dynamic var imageData: Data?

    convenience init(withImageName: String) {
        self.init()
        let imageUrl = Bundle.main.url(forResource: withImageName, withExtension: "png")!
        let imageData = try! Data(contentsOf: imageUrl)
        self.imageData = imageData
    }
}

然后是图像名称列表。我不知道你的存储是如何存储的,但我将它们存储在一个数组中,它们存储在应用程序包中。

let imageNames = [ "ShakerColor1", "ShakerColor2", "ShakerColor3" ]

然后代码构建一个 ImageClasses 数组

   let images = imageNames.map { name -> ImageClass in
      let image = ImageClass(withImageName: name)
      return image
   }

然后最后将图像写入 Realm。

do {
    let realm = try Realm()

    try! realm.write {
        realm.add(images)
    }

} catch let error as NSError {
    print(error.localizedDescription)
}

【讨论】:

  • 非常感谢您的建议,我会尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2020-06-10
相关资源
最近更新 更多