【问题标题】:Failure to write NSString to file on iPad无法将 NSString 写入 iPad 上的文件
【发布时间】:2011-03-25 07:20:39
【问题描述】:

我正在使用文本文件将用户所做的更改保存在列表中(我这样做的原因是为了以后可以将文本文件上传到 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 时问 SO(可能有点傻,抱歉)。

99% 确定是 NSArray *paths 行出错了,但我不知道如何获取文档目录。

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

【问题讨论】:

  • 如果您有第二个问题,请提出第二个问题!是的,写的文件会埋在~/Library/Application Support/iPhone Simulator/...
  • 我不认为这是一个真正的大问题,而且它主要只是一个附加组件,以防在我在 Google 中找到答案之前有人回答了它。对不起。 ^^;;

标签: objective-c nsstring ipad


【解决方案1】:

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

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

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

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

然后再试一次。


顺便说一句,使用 NSError:

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

【讨论】:

  • 啊。我可能应该直接查看 NSError 的文档。在查看文档之前,我倾向于去谷歌搜索和阅读论坛以获取有关如何使用事物的信息。
【解决方案2】:

NSLog() 那个 filePath 字符串。我认为您正在尝试写入目录本身,而不是文件。

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多