将文档预装到iOS应用程序中

情况 :我有一个iOS应用程序处理文件,并让用户保存,编辑,打开和执行这些文件的各种操作。 我希望能够为用户提供一些预先制作的文档,以便在用户打开应用程序(例如模板)时查看自己的自定义文档。

问题 :如何在用户安装我的应用程序并启动它(以及所有前面的时间)后创build文档(或模板文件)并使其出现在“文档”文件夹中?

背景 :这个文档(将被安装到应用程序的文档目录中)是由我创build的,而不是用户创build的。

我知道要做到这一点,你需要将它保存在你的软件包,然后当你的应用程序第一次运行,悄悄地复制到文档目录。 我应该复制它在appDidFinishLaunchingWithOptions方法或在我的viewDidLoad方法,并编写逻辑来检测是否应用程序第一次运行?

我的代码 :在这个网页: http : //textsnip.com/d35fbc但是当它运行时,它总是说:“文件不存在[在文件夹中]”,那么它告诉我它正在被复制。 问题是,当我检查应用程序的文档文件夹,它永远不会在那里,它仍然在捆绑。

为什么不能复制这段代码这是如何工作的?

这些文件实际上必须添加到应用程序包中,然后在应用程序启动时以静默方式复制。

下面的代码将一个文本文件从我的包的顶层复制到文档目录(如果它尚不存在)。

NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *txtPath = [documentsDirectory stringByAppendingPathComponent:@"txtFile.txt"]; if ([fileManager fileExistsAtPath:txtPath] == NO) { NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"txtFile" ofType:@"txt"]; [fileManager copyItemAtPath:resourcePath toPath:txtPath error:&error]; } 

这个代码中的唯一缺陷是,如果用户删除文件,当它们再次打开应用程序时,它立即再次出现。

正如你所说,你把它包括在你的应用程序包(添加到你的项目,并确保它是你的目标的一部分)。 然后你可以通过调用这样的方式访问它的path:

 NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"MyTemplateDoc" ofType:@"extension"]; 

然后将其复制到应用程序的文档文件夹中。

 NSString *docPath = <a path in your documents folder> NSError *error = nil; [[NSFileManager defaultManager] copyItemAtPath:bundlePath toPath:docPath error:&error]; if (error) { // handle copy error. }