2013-02-06 29 views
-2

我從服務器得到了響應:來自服務器的空數據,它在非空條件下?

[NSURLConnection 
    sendAsynchronousRequest:request 
    queue:[[NSOperationQueue alloc] init] 
    completionHandler:^(NSURLResponse *response, 
         NSData *data, 
         NSError *error) 
    { 

     if ([data length] >0 && error == nil) 
     { 
      NSLog(@"DATA1: %@",data); 
      NSString *content; 
      content = [NSString stringWithUTF8String:[data bytes]]; 
      NSLog(@"DATA2: %@",content); 

東西是這裏的怪。第二個NSLOG顯示我一個null數據 - 但如果數據爲空他怎麼能通過if statement? 第一個日誌給我看:<636f6e66 69726d65 64>。我不得不說,有時它確實有用!它取決於值以某種方式...

+1

你應該考慮閱讀文檔。 – 2013-02-06 15:29:21

回答

1

因爲與第一個日誌,你打印NSData實例,第二,NSString你想從數據中產生。但是如果數據不是有效的UTF-8(可能是這種情況,因爲它不是NUL終止的,並且stringWithUTF8String:需要一個NUL終止的字符串,所以它不會在最後停下來並且可能讀取垃圾),那麼它返回nil

你想要的是:

content = [[[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding] autorelease]; 
相關問題