2014-07-02 173 views
3

我知道這個問題之前問過,但沒有一個解決方案爲我工作。我想一個NSData對象轉換爲NSString值。我INITING的NSString的物體,像以下:轉換的NSData到NSString的返回nil

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

html總是nil。我想轉換的NSData是網站的源代碼。這是相當長的。 This是「NSData`我嘗試轉換。

它是導致該問題的數據的長度?我需要將源代碼作爲字符串。我能做些什麼來解決這個問題? 我試了一下,到目前爲止:

  • 試圖與所有編碼格式如圖this答案。
  • 試圖與[NSString stringWithUTF8String:[urlData bytes]];

但無論我做什麼產生相同的結果。無論我做什麼,html總是nil

編輯

正是有了調試控制檯的一個問題。即使對象中有值,調試控制檯始終顯示nil作爲大多數對象的值。但NSLog始終顯示該值。

+1

我會看看'NSData'對象。添加一些調試來檢查長度並公開其中的一些內容。如果這些看起來不錯,那麼編碼是下一個嫌疑犯。 – trojanfoe

+1

你的數據編碼是UTF8嗎? – nicael

+0

您確定您使用的NSData對象是您正在記錄的對象嗎?愚蠢的問題,但這是互聯網,所以我不得不問,除非你表明。 – borrrden

回答

2

這不是與debugger
的問題時,來自編譯器的優化,編譯器看到不直接使用該字符串,並刪除它,並直接轉給另一個方法優化的代碼。

問題的關鍵:你正在運行的項目上release方案

解決方案:
這裏是一個小指南切換項目的Debug方案

1)點擊目標,並點擊Edit scheme...

enter image description here

2)彈出窗口中將顯示

enter image description here

3)點擊Run %Your project%
4)打開構建配置彈出
5)選擇Debug
5)按​​OK
6)你是準備去!現在你可以調試任何東西:)

+0

嗨,我會檢查這一點,並說我明天就任。 :) –

+0

你說的..謝謝..這是問題所在。 :) –

+0

感謝您的檢查;) – l0gg3r

-1

嘗試這一個:

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

通常,轉換從NSData的到的NSString返回nil意味着有從服務器和方法用於編碼所接收的編碼格式之間的失配。

+1

我已經試過這個。只是再試一次。不工作。正如我所說,我嘗試過所有的編碼類型。 –

+0

然後可能是從服務器端收到的響應問題。嘗試使用另一個響應。 –

+0

我已經發布了NSData對象和問題。響應看起來不錯。而是,它是我需要轉換爲字符串的響應。轉換另一個響應可能有效,但肯定不會幫助我。 :) –

1

如果使用ARC,和你剛纔寫的數據轉換爲字符串,並沒有編寫任何代碼尚未實際使用的串碼,它會被立即釋放。檢查是否發生了這種情況。例如,NSLog(@「%@」,html)顯示什麼?

+0

那麼,我正在使用'NSString * html = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];''的下一行的字符串,這就是分配代碼。我嘗試在行分配(上面的行)上設置一個斷點,然後進入並發現該字符串在分配後甚至是零,在下一行分配中。那絕對不能是ARC吧? –

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

即使這是返回零 –