如何在 xCode 中保存 UIimages 数组(swift)

Posted

技术标签:

【中文标题】如何在 xCode 中保存 UIimages 数组(swift)【英文标题】:How to save an array of UIimages in xCode (swift) 【发布时间】:2016-08-05 00:18:04 【问题描述】:

我有一个UIImages 数组,它是动态的。 所以用户可以将照片添加到这个数组中。 我的问题是如何保存这个数组,因为我尝试了一些东西,但它们似乎都不适合我。 我欢迎提出如何完成这项任务的建议。

谢谢。

【问题讨论】:

我试过核心数据,但我不知道如何保存数组。只有单个图像... 它必须是一个uiimages数组吗?因为您可以根据您在核心数据中搜索的内容创建一个数组。例如,假设您有一个实体,其属性类型为 data(后来用作 uiimage)和一个属性“favorite”,它是一个布尔值,表示用户已收藏该图像。您可以使用谓词对收藏的实体进行排序,并使用 NSFetchedResultsController 将它们放入数组中。如果您能提供有关情况的更多详细信息,我们会更有帮助。 ok,这样用户就可以用相机拍照了。 照片保存在名为“images”的数组中。我想在应用关闭时保存这些图像,并在应用启动时将它们恢复为图像 我只是不明白如何保存多个图像,而不在 coreData 中构建数百个变量。 【参考方案1】:

如果你想使用 Core Data,我认为保存图像数组最简单的方法是在添加新图像或删除图像时保存它们。

Core Data 数据模型非常简单。您可以只添加一个名为 Image 的实体或任何在您的上下文中有意义的实体。向实体添加 image 属性。将属性的类型设置为“数据”。生成NSManagedObject 子类,模型就完成了。

现在,您需要如何以及何时保存图像?我认为您应该仅在用户创建新图像时将图像插入核心数据上下文。当用户删除图像时,您应该从 Core Data 上下文中删除一个对象。因为如果用户在您的应用会话中没有对图像执行任何操作,则无需再次保存图像。

要保存新图像,

// I assume you have already stored the new image that the user added in a UIImage variable named imageThatTheUserAdded
let context = ... // get the core data context here
let entity = NSEntityDescription.entityForName(...) // I think you can do this yourself
let newImage = Image(entity: entity, insertIntoManagedObjectContext: context)
newImage.image = UIImageJPEGRepresentation(imageThatTheUserAdded, 1)
do 
    try context.save()
 catch let error as NSError 
    print(error)

我想你知道如何从 Core Data 中删除图像,对吧?

当需要显示图像的 VC 出现时,您执行 NSFetchRequest 并获取所有保存为 [AnyObject] 的图像并将每个元素转换为 Image。然后,使用init(data:) 初始化器将数据转换为UIImages。

编辑:

这里我将向您展示如何将图像恢复为[UIImage]

let entity = NSEntityDescription.entityForName("Image", inManagedObjectContext: dataContext)
let request = NSFetchRequest()
request.entity = entity
let fetched = try? dataContext.executeFetchRequest(request)
if fetched != nil 
    let images = fetched!.map  UIImage(data: ($0 as! Image).image) 
    // now "images" is the array of UIImage. use it wisely.

【讨论】:

感谢您的解决方案,但我不明白如何取回图像。我之前没有使用过 Core-Data。也许你有我的一点源代码。谢谢。 请问您是否获得了 DataContext 方法?谢谢 应该是let context = (UIApplication.sharedApplication().delegate! as! AppDelegate).managedObjectContext@PaulHeinemeyer 谢谢,我想我又遇到了一个问题。在 AppDelegate 类中,我将图像元素附加到我的数组中,当照片来自相机时,我将其保存并将其附加到我的数组中,但随后所有附加的保存图像从一开始就消失了。也许你对这个问题有想法。感谢您的大力帮助:) 当您将新图像附加到数组时,您应该将它插入到数据上下文中。只需使用第一个代码 sn-p。 @PaulHeinemeyer

以上是关于如何在 xCode 中保存 UIimages 数组(swift)的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 应用程序内存泄漏与 NSMutableArray 中的 UIImages

如何通过按 UIButton 从数组中切换 UIViewController 中的 UIImages

如何比较数组中的 UIImages?

如何将 UIImages 数组添加到集合视图

如何创建 UIImages 数组

如何将数组复制到 UIImages 到另一个数组中?