将NSData转换为NSString返回nil

3

我知道这个问题之前已经被问过了,但是没有一个解决方案适用于我。我正在尝试将一个NSData对象转换为NSString值。我正在按照以下方式初始化NSString对象:

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

但是html始终为nil。我正在尝试转换的NSData是网站的源代码,相当长。 这里是我要转换的“NSData”。
是数据长度导致了问题吗? 我需要将源代码作为字符串。我该怎么办才能解决这个问题呢?
我尝试过以下方法:
  • 尝试使用此答案中显示的所有编码格式。
  • 尝试使用[NSString stringWithUTF8String:[urlData bytes]];
但无论我做什么都会产生相同的结果。 无论我做什么,html始终为nil编辑 这是调试控制台的问题。 即使对象具有值,大多数对象的调试控制台始终显示为空值。 但是NSLog始终显示值。

1
我会查看NSData对象。添加一些调试来检查长度并公开其中的一些内容。如果这些看起来没问题,那么编码就是下一个嫌疑对象。 - trojanfoe
1
你的数据编码是UTF8吗? - nicael
抱歉,我没听懂你的意思。我已经在上面的pastebin链接中展示了NSData对象。 - Harikrishnan
我最初没有看到那个。我会说数据看起来没问题,所以这是一个奇怪的错误。 - trojanfoe
@Larme 是的.. 你做了什么? - Harikrishnan
显示剩余13条评论
4个回答

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

问题的关键:您正在运行 release 方案的项目

解决方案:
以下是切换项目到 Debug 方案的简要指南

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

enter image description here

2)将出现弹出窗口

enter image description here

3)单击 Run %Your project%
4)打开“构建配置”弹出窗口
5)选择Debug
6)点击OK
7)准备就绪!现在您可以调试任何内容 :)


嗨,我会在明天到达办公室后立即检查并回复。 :) - Harikrishnan
您说得对,谢谢,那就是问题所在。 :) - Harikrishnan
感谢您的查看;) - l0gg3r

1
如果您正在使用ARC,并且刚刚编写了将数据转换为字符串的代码,但还没有编写任何实际使用该字符串的代码,则它将立即被释放。请检查是否发生了这种情况。例如,NSLog(@“%@”,html)显示什么?

好的,我正在使用字符串,就在NSString *html = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];的下一行,那是分配代码。我尝试在分配(上一行)的断点处设置断点并进入,发现即使在分配的下一行,该字符串仍然为空。这绝对不可能是ARC的问题,对吧? - Harikrishnan

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

即使这个返回 nil - Harikrishnan

-1
试试这个:
 NSString *myString = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];

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

1
我已经尝试过这个了。刚刚又试了一遍,还是不行。就像我说的,我已经尝试了所有编码类型。 - Harikrishnan
可能是从服务器端收到的响应出现了问题。尝试使用另一个响应。 - Jayprakash Dubey
我已经在问题中发布了NSData对象。响应看起来不错。而且,我需要将其转换为字符串。转换另一个响应可能有效,但肯定不会对我有所帮助。 :) - Harikrishnan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接