无法在iPad上将NSString写入文件

时间:2010-08-04 14:28:38

标签: objective-c nsstring ipad

我正在使用文本文件来保存用户在列表中所做的更改(我这样做的原因是我可以稍后将文本文件上传到PC,然后从那里插入它到Excel电子表格中)。我有3个数据结构:一个NSMutableArray键和一个NSMutableDictionary,它的键值是NSStrings的MSMutableArrays。

我遍历这些数据结构并编译一个看起来像这样的文件字符串:

(Key);(value)\t(value)\t(value):\n(Key);(value).. .so on.

所以,对于实际问题:当我试图保存它时,它失败了。我99%肯定这是因为我正在使用的文件路径,但我想备份来检查这一点。代码如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *filePath = [paths objectAtIndex:0];
NSString *fileString = [NSString stringWithString:[self toFileString]];
if(![fileString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:NULL]){
    NSLog(@"File save failed");
} else {
    // do stuff
}

(上面的代码被重新复制,因为实际代码在另一台计算机上。它编译,所以忽略拼写错误?)

我尝试使用NSError,但是我陷入了文档的困境,并且想到在尝试弄清楚如何正确使用NSError时可能会问这个问题(可能有点像白痴,对不起)。

99%肯定是NSArray *路径线绊倒它,但我不知道如何获取文件目录。

编辑:问题解决了,最后一个问题:如果我将其保存到App的文档目录中,我可以在关闭应用程序后查看它是否正确保存?如果它像我认为的那样工作,是不是在应用程序的模拟器上安装沙箱? (即无法检查)

2 个答案:

答案 0 :(得分:4)

NSLog()即filePath字符串。我想你正在尝试写入目录本身,而不是写入文件。

请改为尝试:

filePath = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"myfile.txt"];

答案 1 :(得分:1)

您要保存的文件名是什么?方法

NSArray *paths = NSSearchPathForDirectoriesInDomains(...);
NSString *filePath = [paths objectAtIndex:0];
...
if(![fileString writeToFile:filePath ...

表示您将字符串保存到文件路径,该文件路径与文件夹同名。这当然会失败。请给它起个名字,例如

NSString* fileName = [filePath stringByAppendingPathComponent:@"file.txt"];
if(![fileString writeToFile:fileName ...

再试一次。


BTW,使用NSError:

NSError* theError = nil;
if(![fileString writeToFile:fileName ... error:&theError]) {
//                                             ^^^^^^^^^
  NSLog(@"Failed with reason %@", theError);
  // theError is autoreleased.
}