【问题标题】:Different behaviour of [NSMutableString writeToFile] in iOS7 and iOS8[NSMutableString write To File] 在 iOS 7 和 iOS 8 中的不同行为
【发布时间】:2014-08-18 08:27:35
【问题描述】:

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

NSError* error = nil;
NSMutableString* dat = [[NSMutableString alloc] initWithCapacity:1];
BOOL result = [dat writeToFile:@"FileName.dat" atomically:YES encoding:NSUTF8StringEncoding error:&error];

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

输出 XCode5+iOS7

输出 XCode5+iOS8


虽然running it in iOS7 它显示在error in parsing file path 中, 但是在iOS8beta5 it 中说[NSFileManager fileSystemRepresentationWithPath:] have nil or empty path 会崩溃。
问题:
在 SDK iOS8 和 iOS7 中,它都将 NSError 作为返回错误的参数,所以我认为它应该返回错误而不是崩溃应用程序
苹果大厦是否有任何变化,如果是,请给我相同的参考链接。

【问题讨论】:

  • 例外是正确的:你的路径在哪里? Filename.dat 不是有效路径,只是随机文件名。
  • @holex 我不是在问为什么会发生异常我是在问为什么应用程序崩溃,为什么不同的行为,是否有任何人有链接,其中苹果有关于上述变化的豪宅
  • NSMutableDictionary 上的相同行为:在 iOs7 上运行良好的调用现在崩溃,并出现您在 iOs8 中报告的相同错误(而且我没有运行测试版...)
  • 你说得对,我在iOS8中也有同样的问题,我只是把代码放在try catch中,苹果没有对API进行任何更改。
  • 在 iOs7 之前是否支持使用相对路径(Apple 把它拿走了)或者我们只是幸运到现在,我想我们所能做的就是把它吸起来,开始修复我们所有的代码:)

标签: file ios7 xcode5 ios8 nsmutablestring


【解决方案1】:

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

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

【讨论】:

  • 我知道,但我的问题是它不会在 iOS7 中使我的应用程序崩溃,但在 iOS8beta5 中不会发生同样的情况,
  • @Jageen 我猜这只是未定义的行为。关键是代码是错误的,不管特定版本的 iOS 反应如何。
  • 在 SDK iOS8 和 iOS7 中,它以 NSError 作为返回错误的参数,所以我认为它应该返回错误而不是崩溃应用程序,
  • @Jageen 那么你想要达到什么目的?如果它是一个工作应用程序,则使用正确的代码。如果确认 iOS 8 中存在错误,请向 Apple 提交错误报告。
  • 我不能接受答案,因为它现在解决了我的问题我能做的就是投票,没有别的,对不起
【解决方案2】:

问题是您的文件名@"FileName.dat",没有要保存到的目录的路径。 NSFileManager 本身不会这样做,您需要正常保存到 Documents 文件夹。下面是我常用的代码:

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

【讨论】:

  • 我知道,但我的问题是它不会在 iOS7 中使我的应用程序崩溃,但在 iOS8beta5 中不会发生同样的情况
  • @Jageen 没关系,您声称在 iOS 7 上它不会崩溃,而是输出错误消息。一样的区别。 iOS 8 处于测试阶段,如果您认为它不应该抛出异常,而只是记录错误消息,请报告此错误。无论哪种方式,都不会保存您的数据,我只是向您展示如何实现这一点。
  • @Jageen 使用此代码,告诉我它是否有效。如果是,请接受!我阻止了你的崩溃:)
  • 我不能接受答案,因为它现在解决了我的问题我能做的就是投票,没有别的,对不起
  • @Jageen 我无法理解为什么...如果问题是这个 incorrect 代码在 iOS 8 中崩溃,但在iOS 7 它只是抛出一个错误消息,即意外的 beta 行为,因为你知道 - 这是一个 beta!。所以向 Apple 提交错误但是,无论Apple 使用什么错误处理方法,您的代码实际上都不会工作。就像它不会保存文件一样。你想保存文件吧!?这段代码应该工作,它应该按你的要求做(保存文件)!
猜你喜欢
  • 1970-01-01
  • 2014-12-03
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多