我之前问过这个问题,但没有一个解决方案适合我。我正在尝试将NSData
对象转换为NSString
值。我正在启动NSString
对象,如下所示:
NSString *html = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
但html
始终是nil
。我试图转换的NSData
是网站的源代码。这是相当长的。 This 是' NSData`我正在尝试转换。
导致问题的数据长度是多少?我需要源代码作为字符串。我该怎么做才能解决这个问题? 到目前为止我尝试了什么:
[NSString stringWithUTF8String:[urlData bytes]];
但无论我做什么产生相同的结果。无论我做什么,html
总是nil
。
修改
这是调试控制台的问题。即使对象中包含值,调试控制台也始终显示nil作为大多数对象的值。但NSLog始终显示该值。
答案 0 :(得分:2)
这不是debugger
的问题
问题来自编译器优化,编译器看到没有直接使用该字符串,并通过删除它并直接将其传递给另一个方法来优化代码。
问题的关键:您正在release
计划
<强>解决方案:强>
这是一个将项目切换到Debug
方案
1)点击目标,然后点击Edit scheme...
2)将显示弹出窗口
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意味着从服务器接收的编码格式与用于编码的方法之间存在不匹配。