writeToFile 崩溃

Posted

技术标签:

【中文标题】writeToFile 崩溃【英文标题】:Crash on writeToFile 【发布时间】:2011-05-27 14:49:42 【问题描述】:

我正在使用一种非常简单的方法将文件名存储在文本文件中。出于某种原因,当我启动 writeToFile 时,我遇到了崩溃:

pathString = [NSString stringWithFormat:@"New FileName - %@.png", identifier];  
NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];
NSString *newContents = [NSString stringWithFormat:@"%@:::%@",currentContents, pathString];
NSData *newData = [newContents dataUsingEncoding:NSUTF8StringEncoding];
[newData writeToFile:saveFilePath options:NSDataWritingAtomic error:nil];

它读取文件,将其内容放入名为 currentContents 的变量中,然后将新字符串添加到文件中,然后重新写入。这里出了什么问题。

如果没有 writeToFile 行,它可以工作,使用它,我会崩溃。

saveFilePath 的来源

NSString *saveDocument = [NSString stringWithFormat:@"SavedFile.txt"];
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
saveFilePath = [docsDirectory stringByAppendingPathComponent:saveDocument];

saveFilePath 的 NSLog 显示正确的路径

【问题讨论】:

您应该使用-[NSData writeToURL:options:error:],因为Apple 建议在处理文件路径时使用NSURL 对象而不是NSString 对象。顺便说一句,您在第一行有语法错误。 啊,你指的是逗号,这是在我的匿名过程中完成的,我的原始代码有逗号,哈哈。对,我会尝试使用 NSURL 而不是 NSString error:nil 应该是 error:NULL @onnoweb 您的建议仍然存在错误。 saveFilePath 来自哪里? 【参考方案1】:

我认为您的问题实际上可能是 NSData 对象末尾缺少空字符 ('\0')。所以你最终得到了混乱的数据。无论如何,您可能想立即在新字符串上使用 -writeToFile:atomically:encoding:error:

【讨论】:

【参考方案2】:

原来文件没有写入的原因是因为一个未分配的变量:

NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];

应该是:

NSString *currentContents = [[NSString alloc] initWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil];

【讨论】:

以上是关于writeToFile 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

开发过程中遇到的崩溃信息及原因,崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃

存档崩溃中的 iOS 崩溃似乎是块

VS2013 程序崩溃了 怎么定位到造成崩溃原因的语句

如何防止 Bootstrap 崩溃的子项在崩溃崩溃时调整大小

请教如何生成程序的崩溃日志

如何获得Android的崩溃日志