Objective c 将文档预加载到iOS应用程序

Objective c 将文档预加载到iOS应用程序,objective-c,ios,filesystems,Objective C,Ios,Filesystems,形势: 我有一个iOS应用程序,可以处理文件,让用户保存、编辑、打开这些文件并执行各种操作。我希望能够有一些预先制作的文档,供用户在打开应用程序时查看(例如模板),以及他们自己的自定义文档 问题: 在用户安装并启动我的应用程序(以及之前的所有时间)后,如何创建文档(或模板文件)并将其显示在文档文件夹中 背景: 此文档(安装到应用程序文档目录中的文档)是由我创建的,而不是由用户创建的 我知道要做到这一点,你需要将它保存在你的包中,然后当你的应用程序第一次运行时,以静默方式将它复制到Document

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

问题: 在用户安装并启动我的应用程序(以及之前的所有时间)后,如何创建文档(或模板文件)并将其显示在文档文件夹中

背景: 此文档(安装到应用程序文档目录中的文档)是由我创建的,而不是由用户创建的

我知道要做到这一点,你需要将它保存在你的包中,然后当你的应用程序第一次运行时,以静默方式将它复制到Documents目录中。我应该在appDidFinishLaunchingWithOptions方法中复制它,还是在我的viewDidLoad方法中复制它并写入逻辑以检测它是否是应用程序第一次运行

我的代码: 在本网页: 但当它运行时,它总是说:“文件不存在[在文档文件夹中]”,然后它告诉我它正在被复制。问题是,当我检查应用程序的文档文件夹时,它从不在那里,它仍然在捆绑包中

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

正如您所说,您将其包括在应用程序包中(将其添加到您的项目中,并确保它是您目标的一部分)。然后,您可以通过调用以下命令来访问它的路径:

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.
}
NSString*docPath=
n错误*错误=nil;
[[NSFileManager defaultManager]copyItemAtPath:bundlePath
toPath:docPath
错误:&错误];
如果(错误){
//处理复制错误。
}

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

下面的代码将文本文件从my bundle的顶层复制到documents目录(如果它还不存在)

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

这段代码中唯一的缺陷是,如果用户删除了该文件,当他们再次打开应用程序时,该文件会立即重新出现。

我在viewDidLoad方法中添加了以下代码,但它从未复制过(我甚至在Mac上找到了iOS模拟器文件,但它不在那里)。下面是代码的链接:当我运行应用程序时,NSLog行都按预期执行,这告诉我它是在viewDidLoad方法中执行的。但是你对目标说了什么?如何将其添加到我的目标中?选择该文件,并在XCode 4的右侧(可能必须打开右侧面板)的第一个选项卡中,确保选择了您的目标。我已将目标成员身份添加到应用程序和应用程序测试中。我甚至用断点测试了复制代码,但它没有复制-这可能与docPath或bundlePath有关吗?您检查的错误不正确。您应该检查copyItemAtPath:…方法返回的值是否为
nil
,在这种情况下,error参数包含实际错误。