如何在核心数据中按名称保存图像?

时间:2016-12-08 15:14:53

标签: ios swift core-data

我在Assets.xcassets中有名为city_00,city_01,...,city_10

的图片

我将它们存储在一个数组

 let cityImages: [UIImage] = [UIImage(named: "city_00")!,UIImage(named: "city_01")!,.....UIImage(named: "city_10")!]

 let cityNames = ["City A","City B",....., "City J"]

然后我在项目中使用collectionview给他们打电话,让用户选择他们喜欢的任何城市

 var imageSelected = [UIImage]()
 var cityImage:UIImage?
var cityImageName:String?

   func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let cell = collectionView.cellForItem(at: indexPath)
        collectionView.allowsMultipleSelection = false
        cityImage = imageSelected[(indexPath as NSIndexPath).row]
 let selectedImgName = String(format: "%%" ,imageSelected[(indexPath as NSIndexPath).row])
        cityImageName = selectedImgName
}

如何根据所选图像在cityImageName中存储城市名称?

3 个答案:

答案 0 :(得分:0)

您应该使用NSValueTransformer将图像转换为NSData,然后将数据blob存储在Core Data中。 Here是一个教程,展示了如何实现这一目标。

如果你真的想将它存储为字符串(由于编码会占用更多空间),你可以查看this question如何对图像进行base64编码。

答案 1 :(得分:0)

不建议将图像存储到核心数据中。这将缺乏性能应用。

将图像转换为Base64字符串并将Base64字符串转换为图像将花费大量时间。

我建议您将图像存储到文档文件夹中,并将该路径存储到coreData中。

通过这种方式,您可以轻松存储和检索图像,然后将图像存储到Core Data中。

您也可以使用延迟加载,这种方法可以进一步提高应用性能。

如您所说,您的图像资源中包含所有图像,只需将图像的名称存储在Core数据库中。

您将image_name存储在cityImages数组中。

 func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

     let yourRequiredImage:String = cityImages[indexPath.row]// Save this Image name in your core data.
     print (yourRequiredImage)
}

答案 2 :(得分:0)

您的cityImages数组是一个图像数组。

将其更改为图像名称数组。

它将使用更少的内存,然后在选定的方法中,您可以从所选索引处的数组中获取图像名称。