来自服务器的null数据,在非null条件下?

时间:2013-02-06 15:24:25

标签: objective-c

我从服务器得到了回复:

 [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 个答案:

答案 0 :(得分:1)

因为使用第一个日志,您打印的是NSData实例,而第二个是您想要从数据生成的NSString。但是如果数据无效UTF-8(可能是这种情况,因为它不是NUL终止的,并且stringWithUTF8String:需要一个以NUL结尾的字符串,所以它不会在结束时停止并且它可能会读取垃圾),然后它返回nil

你想要的是:

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