按照最近制作的 YouTube 教程尝试异步连接到网址。为响应重新调整 null,但数据长度大于 0。我见过其他同时进行 null 和长度检查的代码,我没有抛出,只是 NSLog'd 他们。
@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
不知道出了什么问题...有什么建议吗?