我在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
中存储城市名称?
答案 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数组是一个图像数组。
将其更改为图像名称数组。
它将使用更少的内存,然后在选定的方法中,您可以从所选索引处的数组中获取图像名称。