【发布时间】:2012-03-25 19:03:33
【问题描述】:
我有 ios 应用程序。我需要存储一些数据。我试图在 txt 文件中这样做:
[toFile writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL];
但是当我关闭视图控制器时,我保存数据的地方,文件的内容再次为空。为什么?
【问题讨论】:
标签: ios xcode storage text-files datastore
我有 ios 应用程序。我需要存储一些数据。我试图在 txt 文件中这样做:
[toFile writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL];
但是当我关闭视图控制器时,我保存数据的地方,文件的内容再次为空。为什么?
【问题讨论】:
标签: ios xcode storage text-files datastore
确保将文件保存在文档目录中,而不是资源目录中,因为您无法写入应用程序包。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"user.txt"];
还可以查看iOS Storage Guidelines(需要登录):
- 只有用户生成的或您的应用程序无法重新创建的文档和其他数据才能存储在 /Documents 目录,将自动 由 iCloud 备份。
我认为这些教程可以帮助您了解如何在 iOS 上使用目录和文件:
【讨论】:
writeToFile 将为您处理。只需确保您知道将其存储在何处以供重复使用。我想把它放到 Documents 目录就可以了。但请记住,如果不加密,则不应将敏感数据存储在此文件中,因为它并没有真正保存在那里。
我敢打赌,您正在尝试写入您的应用程序包。你不能。您必须在 NSDocumentsDirectory 或 [app sandbox]/Library 中写入。
【讨论】:
将NSError * 参数传递给writeToFile,当writeToFile 返回NO(表示失败)时,您可以打印出NSError 信息以帮助您找出问题所在。
例如:
NSError * error = nil;
BOOL success;
success = [toFile writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (success == NO)
{
NSLog( @"error in writeToFile - %@", [error localizedDescription] );
}
【讨论】: