【发布时间】:2011-09-23 16:45:23
【问题描述】:
我正在尝试将一个非常基本的文本字符串写入我的文档目录,然后从那里开始保存其他文件等。
我目前被困在我的文档目录中没有写入任何内容
(在我的viewDidLoad)
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
NSString *documentsDirectory = [pathArray objectAtIndex:0];
NSString *textPath = [documentsDirectory stringByAppendingPathComponent:@"file1.txt"];
NSString *text = @"My cool text message";
[[NSFileManager defaultManager] createFileAtPath:textPath contents:nil attributes:nil];
[text writeToFile:textPath atomically:NO encoding:NSUTF8StringEncoding error:NULL];
NSLog(@"Text file data: %@",[[NSFileManager defaultManager] contentsAtPath:textPath]);
这是打印出来的:
2011-06-27 19:04:43.485 MyApp[5731:707] 文本文件数据:(null)
如果我尝试这个,它也会打印出 null:
NSLog(@"My Documents: %@", [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:NULL]);
写入此文件时我错过了什么或做错了什么? 可能是我需要在我的 plist 中更改的内容或需要一些框架/导入?
谢谢
[编辑] 我通过 writeToFile 传递了一个 NSError 对象并得到了这个错误:
错误:错误域=NSCocoaErrorDomain Code=512“操作无法完成。(Cocoa 错误 512。)”UserInfo=0x12aa00 {NSFilePath=/var/mobile/Applications/887F4691-3B75-448F-9384-31EBF4E3B63E /Documents/file1.txt, NSUnderlyingError=0x14f6b0 "操作无法完成。不是目录"}
[编辑 2] 这在模拟器上可以正常工作,但在我的手机上却不行:/
【问题讨论】:
-
您应该做的第一件事是查看您的写操作是否产生任何错误。在对
writeToFile:的调用中,传入一个NSError对象并在调用后检查错误。 -
试试
[text writeToFile:textPath atomically:YES encoding:NSUTF8StringEncoding error:NULL];。请注意这里的区别是您正在执行原子写入。查看[NSString writeToFile:atomically:encoding:error:]的 Apple Docs 以了解其背后的原因。另外,由于错误是在抱怨目录,请在设备上调试您的应用程序以查看文件的路径。 -
我也尝试过更改原子值,但没有任何区别。
-
好吧,我刚刚在我的机器和 iPad 上按原样尝试了您的代码,并且都可以工作:-/。不知道该告诉你什么,除非在另一台设备上尝试相同的代码,看看你是否得到相同的结果。从错误来看,问题似乎是无法访问文件路径。如果您能找到某种方法直接访问文件系统以验证可能有帮助的结构(以编程方式或其他方式)。我用谷歌搜索发现Phone Disk。我没有尝试过,所以如果它搞砸了您的设备,请不要激怒我:) ...如果您确实找到了解决方案,请发布答案以帮助他人。
标签: iphone objective-c ios nsfilemanager