2

我目前正在尝试使用以下代码写入文件:

NSString *state = @"Oklahoma";

    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"StatesVisited" ofType:@"txt"];
    NSFileHandle *filehandle = [NSFileHandle fileHandleForWritingAtPath:filepath];
    [filehandle seekToEndOfFile];
    [filehandle writeData:[state dataUsingEncoding:NSUTF8StringEncoding]];
    [filehandle closeFile];

据我所知,这应该可行。我已经能够使用相同的文件路径从文件中读取。

当我运行此代码并打开我的文本文件时,什么都不存在。

4

4 回答 4

3

[NSBundle mainBundle]必须被视为只读。相反,将包中的文件复制到应用程序支持目录,然后在那里写入。

使用来查找/创建应用程序支持目录。

于 2013-04-25T21:33:16.193 回答
1

禁止写入主包中的资源。在这种情况下,您必须使用沙盒路径的/Documentsor /Library

在您的应用程序首次启动时,只需将所有捆绑的文档/文件复制到 /Documents,下面是一个链接

之后,只需按照您自己的设计 - 这次它会工作得很好。

于 2013-04-25T21:29:22.017 回答
0

你可能会得到一个 nil 文件句柄,fileHandleForWritingAtPath:因为你试图在你的应用程序包中打开一个文件。如果合适,您可以将数据写入 NSUserDefaults。否则,您应该将文件写入应用程序支持目录。以下博客文章描述了如何获取它或遵循 @Sebastians 对 Document 文件夹的建议。

于 2013-04-25T21:31:38.390 回答
0

试试这个

NSString *state = @"Oklahoma";
NSString *strPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
                strPath = [strPath stringByAppendingPathComponent:@"StatesVisited.txt"];
                [state writeToFile:strPath
                          atomically:NO
                            encoding:NSStringEncodingConversionAllowLossy
                               error:nil];
于 2013-04-26T05:45:23.920 回答