[NSMutableString writeToFile]在iOS7和iOS8中的不同行为

[NSMutableString writeToFile]在iOS7和iOS8中的不同行为,file,ios7,xcode5,ios8,nsmutablestring,File,Ios7,Xcode5,Ios8,Nsmutablestring,这里我有一个将NSMutableString保存到文件(FileName.dat)的演示代码 但我在iOS7和iOS8beta5中运行时有两个不同的输出 输出XCode5+iOS7 输出XCode5+iOS8 当在iOS7中运行它时,它显示在解析文件路径时出现了一个错误, 但是在iOS8beta5中,它崩溃了,因为它说[NSFileManager fileSystemRepresentationWithPath:]的路径为nil或空。 问题: 在SDK iOS8和iOS7中,它都以NSE

这里我有一个将NSMutableString保存到文件(FileName.dat)的演示代码

但我在iOS7和iOS8beta5中运行时有两个不同的输出

输出XCode5+iOS7

输出XCode5+iOS8


当在iOS7中运行它时,它显示在解析文件路径时出现了一个错误, 但是在iOS8beta5中,它崩溃了,因为它说
[NSFileManager fileSystemRepresentationWithPath:]的路径为nil或空。

问题:
在SDK iOS8和iOS7中,它都以NSError作为参数来返回错误,因此我认为它应该返回错误,而不是使应用程序崩溃

苹果大厦是否有任何变更,如果有,请给我参考链接。

您传递到
[NSData writeToFile:atomicaly::
的路径不完整,应该是完整路径


这通常是通过获取
文档
文件夹的路径并附加该文件名来完成的。

传递给
[NSData writeToFile:atomically:
的路径不完整,应该是完整路径


这通常是通过获取
文档
文件夹的路径并附加该文件名来完成的。

问题是您的文件名,
@“filename.dat”
,没有要保存到的目录的路径
NSFileManager本身不执行此操作,您通常需要保存到
Documents
文件夹中。以下是我通常使用的代码:

[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:myFileName];

问题是您的文件名,
@“filename.dat”
,没有要保存到的目录的路径
NSFileManager本身不执行此操作,您通常需要保存到
Documents
文件夹中。以下是我通常使用的代码:

[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:myFileName];


例外情况是正确的:您的路径在哪里?
Filename.dat
不是有效路径,只是一个随机文件名。@holex我不是问为什么会发生异常,我是问为什么应用程序会崩溃,为什么会有不同的行为,是否有任何一个链接与苹果在NSMutableDictionary上的ChangesName行为有关:一个在iOs7上运行良好的调用现在由于与你在iOs8中报告的相同错误而崩溃(我没有运行测试版…)你是对的,我在iOs8中也有相同的问题,我只是在try-catch中添加了代码,苹果没有对API进行任何更改。无论是在iOs7之前支持使用相对路径(苹果将其删除),还是我们到目前为止一直很幸运,我想我们所能做的就是接受它,并着手修复所有代码:)例外是正确的:你的路径在哪里?
Filename.dat
不是有效路径,只是一个随机文件名。@holex我不是问为什么会发生异常,我是问为什么应用程序会崩溃,为什么会有不同的行为,是否有任何一个链接与苹果在NSMutableDictionary上的ChangesName行为有关:一个在iOs7上运行良好的调用现在由于与你在iOs8中报告的相同错误而崩溃(我没有运行测试版…)你是对的,我在iOs8中也有相同的问题,我只是在try-catch中添加了代码,苹果没有对API进行任何更改。无论是在iOs7之前支持使用相对路径(苹果将其删除),还是我们到目前为止一直很幸运,我想我们所能做的就是接受它,并着手修复我们的所有代码:)我知道,但我的问题是,它并没有在iOs7中破坏我的应用程序,但同样的情况在iOS8beta5中不会发生,@我想这只是一种未定义的行为。关键是,无论特定版本的iOS如何反应,代码都是错误的。在SDK iOS8和iOS7中,它都以NSError作为参数返回错误,因此我认为它应该返回错误,而不是使应用程序崩溃,@Jageen那么,您试图实现的是什么?如果它是一个正常工作的应用程序,请使用正确的代码。如果确认iOS 8中存在漏洞,那么向苹果公司提交一份漏洞报告。我不能接受答案,因为它现在解决了我的问题。我能做的就是投票,其他什么都不知道,对不起,但我的问题是,它没有在iOS7中破坏我的应用程序,但在iOS8beta5中也不会发生同样的情况,@Jageen我想这只是未定义的行为。关键是,无论特定版本的iOS如何反应,代码都是错误的。在SDK iOS8和iOS7中,它都以NSError作为参数返回错误,因此我认为它应该返回错误,而不是使应用程序崩溃,@Jageen那么,您试图实现的是什么?如果它是一个正常工作的应用程序,请使用正确的代码。如果确认iOS 8中存在漏洞,那么向苹果提交一份漏洞报告。我不能接受答案,因为它现在解决了我的问题。我能做的就是升级投票,对不起,我知道,但我的问题是,它没有在iOS 7中破坏我的应用程序,但同样的,它不会在iOS 7中发生iOS8beta5@Jageen没关系,您声称在iOS 7上,它没有崩溃,而是输出一条错误消息。同样的区别。iOS 8正在测试中,如果您认为它不应该抛出异常,请报告错误,而只是记录一条错误消息。不管怎样,你的数据并没有被保存,我只是告诉你如何实现它。@Jageen使用这段代码,告诉我它是否有效。如果有,接受!我阻止了你的崩溃:)我不能接受这个答案,因为它现在解决了我的问题。我能做的就是投票,没有别的,Sorry@Jageen我很难理解为什么。。。如果问题是这个错误的代码在iOS 8中崩溃,但在iOS 7上它只是抛出一条错误消息,这是意外的测试行为,因为你知道-这是测试!。因此,向苹果提交一个bug。然而,不管苹果使用什么错误处理方法,你的代码实际上都不会工作。就像它不会保存文件一样。是否要正确保存文件!?这段代码应该可以工作,它应该做你要求的事情(保存文件)!我知道,但我的问题是它并没有在iOS7中破坏我的应用程序,但同样的情况也不会发生在iOS7中iOS8beta5@Jageen没关系,你可以在iOS 7上声明,而不是在c上