2013-02-25 53 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); 
    } 
}];