-1

目前使用:

NSString* path = [[NSBundle mainBundle] pathForResource:@"filename" 
                                                 ofType:@"txt"];

但是,这仅在我将文件手动添加到应用程序包中后才有效。

我可以使用文档目录,但这更糟。

重置sim后,文件消失。我怎样才能让它留下来?

我如何将文件从某处写到那里?就像从源文件中一样?我不想分配几兆字节的 NSString 对象。

4

3 回答 3

2

归功于 freenode irc (#iphonedev) 上的 Lyle42:

我不知道这个领域甚至存在。通过将任何文件添加到复制文件构建阶段(在构建阶段下),它们会在构建中持续存在。

然后这段代码:

NSString *_filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"txt"];

NSLog(@"%@",_filePath);

NSData *_binary = [NSData dataWithContentsOfFile:_filePath];  

NSString *_fileContents = [[NSString alloc] initWithData:_binary encoding:NSUTF8StringEncoding];

效果很好。(将文件内容加载到 NSString 中)。

复制文件构建阶段

于 2013-01-12T07:48:14.917 回答
1

您可以使用它来获取文件的路径

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [documentPaths objectAtIndex:0];
filePath = [path stringByAppendingPathComponent:file_name];

您可以使用从您的应用程序包中获取文件

NSString *pathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:file_name];
于 2013-01-12T05:35:33.353 回答
0

我可以使用文档目录,但这更糟。

并不真地。文档目录是持久的,并且是由您的应用程序创建的基本文档的推荐目录。此外,它由iTunes备份,并且可以指定为iCloud备份。应用程序包无法与之竞争!

重置sim后,文件消失。我怎样才能让它留下来?

你不能,一旦模拟器被“重置”(我的意思是硬擦除所有数据和应用程序),什么都没有保存。但是,在两次测试构建之间,从应用程序包中复制的数据应该可以保留,除非您将内容存储在/tmp. 此外,捆绑中的对象在构建阶段被“刷新”(重新复制),这意味着您的资源不会被清除,只是重置为项目中指定的资源。

我如何将文件从某处写到那里?就像从源文件中一样?我不想分配几兆字节的 NSString 对象。

要将文件读入内存,它最终必须变成“几兆字节的 NSString”,但如果你真的想在你的大型字符串对象计划中添加一点 IO,请查看NSFileManager.

于 2013-01-12T05:02:09.350 回答