0

我目前正在开发一个将显示某些图像文件的应用程序。随着时间的推移,将通过 NSURL 获取过程添加更多图像,这意味着我希望将它们保存在同一个位置,所以当我想要加载它们时,它们都在同一个目录中。

该应用程序还将允许删除这些文件。我最初虽然可以将它们放在文档目录中,但我看不到通过 xcode 执行此操作的方法。我知道我可以在编译时将它们添加到 bundles 目录,但我读到您不能通过代码将项目保存到 bundle 目录。我曾考虑过在加载时将文件复制到文档目录,但这似乎是多余的,因为我会有一些文件的两个副本。

我确定我在这里遗漏了一些非常简单的东西,但是如何/在哪里保存图像,然后能够从保存位置添加/删除?

任何帮助是极大的赞赏。

4

1 回答 1

2

首先,您需要阅读并理解Apple 提供的这份文档。它解释了应用程序如何保存和存储文件、它们的存储位置、如何存储它们等等。听起来您需要将文件存储在 Documents 目录中。这是 Apple 对文档目录的描述:

使用此目录来存储重要的用户文档和应用程序数据文件。关键数据是您的应用程序无法重新创建的任何数据,例如用户生成的内容。该目录的内容可以通过文件共享提供给用户。此目录的内容由 iTunes 备份。

您的应用可以保存、读取、覆盖、重命名、删除等存储在此处的文件。当您的应用程序安装在设备上时,会自动创建文档目录 - 但是填充它(或不填充)是您的工作。

您不能将某些文件设置为移动到 Xcode 中的 Documents Directory。您可以在第一次启动时从您的捆绑包中将它们移到那里,如下所示:

//Start the process on the background thread to avoid clogging up the UI (esp. on the first launch)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) {
    //Create File Ptah
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"FileName.ext"];
    //Only copy file if it doesn't already exist
    if ([fileManager fileExistsAtPath:filePath] == NO) {
           //Get file path of file in bundle
           NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"FileName" ofType:@"ext"];
           //Copy the bundle file to the documents directory (we can't move it because the contents of the bundle are read-only)
           [fileManager copyItemAtPath:resourcePath toPath:filePath error:&error];
    }
});
于 2013-06-27T14:33:42.837 回答