2013-02-25 54 views
0

跟随最近制作的YouTube教程,尝试异步连接到Web地址。 为响应重新调整空值,但数据长度大于0.我已经看到了其他的代码,它们都会执行null &长度检查,我没有抛出,只是NSLog对它们进行了检查。NSURLConnection Asyncronous Request返回null

@implementation ViewController 

-(void)fetchAddress:(NSString *)address { 

NSLog(@"Loading Address: %@", address); 
[iOSRequest requestToPath:address onCompletion:^(NSString *result, NSError *error) { 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     if (error) { 
      [self stopFetching:@"Failed to Fetch"]; 
      NSLog(@"%@", error); 
     } else { 
      [self stopFetching:result]; 
      NSLog(@"Good fetch: %@", result); 
     } 
     }); 
    }]; 

} 


- (IBAction)fetch:(id)sender { 

    [self startFetching]; 
    [self fetchAddress:self.addressField.text]; 
    NSLog(@"Address: %@", self.addressField.text); 

} 


-(void)startFetching { 

    NSLog(@"Fetching..."); 
    [self.addressField resignFirstResponder]; 
    [self.loading startAnimating]; 
    self.fetchButton.enabled = NO; 

} 


-(void)stopFetching:(NSString *)result { 

    NSLog(@"Done Fetching %@", result); 
    self.outputLabel.text = result; 
    [self.loading stopAnimating]; 
    self.fetchButton.enabled = YES; 

} 




@implementation iOSRequest 


    +(void)requestToPath:(NSString *) 
     path onCompletion:(RequestCompletionHandler)complete { 


    NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init]; 


    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path] 
     cachePolicy:NSURLCacheStorageAllowedInMemoryOnly 
     timeoutInterval:10]; 


    NSLog(@"path: %@ %@", path, request); 

    [NSURLConnection sendAsynchronousRequest:request 
     queue:backgroundQueue 
     completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
     NSString *result = [[NSString alloc] initWithData: 
      data encoding:NSUTF8StringEncoding]; 
     if (complete) { 
      complete(result, error); 
      NSLog(@"result: %@ %lu %@", result, (unsigned long)[data length], error); 
     } 
    }]; 
} 

请求http://www.google.com> 响应空 数据长度为13644

不知道什么是错的...有什么建议?

+0

“initWithData:encoding:'调用失败的原因是什么? – 2013-02-25 03:14:38

+0

@JoshCaswell:NSASCIIStringEncoding?似乎正在工作,谢谢! – BlizzofOZ 2013-02-25 03:34:25

回答

2

感谢约什 - 卡斯威尔为指向正确的方向,但让我找出自己。

改变了initWithData编码从NSUTF8StringEncoding到NSASCIIStringEncoding。

[NSURLConnection sendAsynchronousRequest:request 
    queue:backgroundQueue 
    completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
    NSString *result = [[NSString alloc] initWithData: 
     data encoding:NSASCIIStringEncoding]; 
    if (complete) { 
     complete(result, error); 
     NSLog(@"result: %@ %lu %@", result, (unsigned long)[data length], error); 
    } 
}];