将NSData转换为NSString将返回nil

时间:2014-07-02 09:15:52

标签: ios objective-c nsstring nsdata

我之前问过这个问题,但没有一个解决方案适合我。我正在尝试将NSData对象转换为NSString值。我正在启动NSString对象,如下所示:

NSString *html = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];

html始终是nil。我试图转换的NSData是网站的源代码。这是相当长的。 This 是' NSData`我正在尝试转换。

导致问题的数据长度是多少?我需要源代码作为字符串。我该怎么做才能解决这个问题? 到目前为止我尝试了什么:

  • 尝试使用 this 答案中显示的所有编码格式。
  • 尝试[NSString stringWithUTF8String:[urlData bytes]];

但无论我做什么产生相同的结果。无论我做什么,html总是nil

修改

这是调试控制台的问题。即使对象中包含值,调试控制台也始终显示nil作为大多数对象的值。但NSLog始终显示该值。

4 个答案:

答案 0 :(得分:2)

这不是debugger的问题 问题来自编译器优化,编译器看到没有直接使用该字符串,并通过删除它并直接将其传递给另一个方法来优化代码。

问题的关键:您正在release计划

上运行项目

<强>解决方案:
这是一个将项目切换到Debug方案

的小指南

1)点击目标,然后点击Edit scheme...

enter image description here

2)将显示弹出窗口

enter image description here

3)点击Run %Your project%
4)打开Build Configuration弹出窗口
5)选择Debug
5)按OK
6)你准备好了!现在你可以调试任何东西:)

答案 1 :(得分:1)

如果您正在使用ARC,而您刚刚编写了将数据转换为字符串的代码,并且还没有编写任何实际使用该字符串的代码,则会立即取消分配。检查是否发生了这种情况。例如,NSLog(@&#34;%@&#34;,html)显示什么?

答案 2 :(得分:0)

NSAttributedString *str = [[NSAttributedString alloc] initWithData:data options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
documentAttributes:nil error:&error];

答案 3 :(得分:-1)

试试这个:

 NSString *myString = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];

通常,从NSData到NSString的转换返回nil意味着从服务器接收的编码格式与用于编码的方法之间存在不匹配。