objective-c - 将文档预加载到 iOS 应用程序中

标签 objective-c ios filesystems

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

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

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

我知道要做到这一点,您需要将其保存在您的包中,然后当您的应用程序首次运行时,将其静默复制到文档目录中。我应该将它复制到 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];
}

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

关于objective-c - 将文档预加载到 iOS 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745768/

相关文章:

ios - 删除在 coredata 中具有递归关系的记录

iphone - 在iOS中,实现滑动 "drawers"的最佳方式是什么

javascript - Google Chrome 的文件系统 API 是否允许多个 blob 的写入操作?

python - 如何复制文件?

c# - 如何快速创建内容为 "natural"的大型 (>1gb) 文本+二进制文件? (C#)

objective-c - 动态更改 NSStringWithFormat 中的变量数

objective-c - 如何使用 XCode 4 使我的代码兼容 Tiger (10.4)?

ios - 排序 NSArray 的 NSDictionaries 忽略大小写

objective-c - 核心数据 : only the last object can be initialized correctly in a loop

ios - 如何添加阴影、核心图形