在哪里放置文件以便以后通过代码访问?

时间:2013-06-27 13:59:48

标签: ios objective-c filesystems

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

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

  

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

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

您无法将某些文件设置为移动到Xcode中的文档目录。你可以在第一次发布时将它们移到那里,如下所示:

//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];
    }
});