本地保留图像数据(swift 3)

在本文中,我将介绍如何在手机上本地保存图像数据。 我之前的文章介绍如何启动相机并在您的应用程序中运行-在此处查看。 我们将在该帖子停止的地方进行提取,并获取我们在应用程序中拍摄的照片以供粘贴。

核心数据

我们不会使用核心数据直接存储图像数据,而是使用图像路径存储在手机上的文件路径。 核心数据不是用于存储大量数据的好工具,但是对于存储可表示文件路径的字符串之类的东西而言,它却非常有用。

让我们建立一个实体,该实体将用于存储文件路径,并编写一个获取该字符串的方法。 在.xcdatamodeld文件中,我添加了一个名为“ Image”的新实体,并为其赋予了两个属性,即字符串类型的“ filePath”和“ placement”。

在开始使用CoreData之前,先设置我们实际要保存的filePath和imageData!

文件管理器

文件管理器使您可以直接使用iPhone的文件目录。 使用FileManager,我们可以指定保存文件的位置,并在需要时将其删除。

当我们在相机视图控制器中时,单击“使用照片”时,我们将要设置文件路径并保存imageData。 在didFinishPickingMediaWithInfo方法中,我们可以添加以下代码。

使用FileManager类,我们可以访问iPhone的主目录,为我们的照片创建一个唯一的名称,并获取用于保存照片数据的URL。 我添加了一些打印语句来显示每个变量的作用。 还要注意,文件路径具有该应用程序的代码,因此文档文件路径在不同应用程序之间是唯一的。

我们在最后一行创建的filePath使用selectedImageTag创建一个唯一的.png组件以附加到文件路径的末尾。 在这种情况下,我们只是给它一个数字1、2或3。

请注意,如果我们尝试两次保存“ 1.png”文件,则会崩溃,因为filePath已经存在。 保存新的“ 1.png”图像时,我们将需要添加一些逻辑以清除旧数据。

接下来,我们可以编写将图像实际转换为数据并将其写入创建的filePath的代码。

返回核心数据

现在我们有了通向imageData的filePath,我们可以使用coreData保存filePath了。 我们将需要设置逻辑来保存和获取所有三个图像的filePath。

由于CoreData样板代码存在于AppDelegate中,因此我们需要在视图控制器类中访问其共享实例。 让我们设置一个可以用来引用它的变量。

现在,我们可以使用persistentContainer变量和saveContext函数访问CoreData堆栈。 这将使我们能够向使用核心数据的didFinishPickingMediaWithOptions函数添加一些逻辑。

请注意,imageTag决定图像的位置。

我们需要做的最后一件事是编写一个函数,该函数将获取coreData Image实体,将图像数据转换为图像并在适当的视图中显示图像(如果存在)。

我们可以在viewDidLoad中调用它,该应用程序应该可以正常工作!

需要注意的一件事是,当您将imageData保存到documentDirectory时,用户无法轻松删除它。 我将在应用程序“清除缓存”的底部添加一个按钮,该按钮将从目录中删除所有文件。

这是指向github repo的链接

感谢您阅读🙂