0

按照最近制作的 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

不知道出了什么问题...有什么建议吗?

4

1 回答 1

2

感谢 Josh Caswell 指出了正确的方向,但让我自己弄清楚。

将 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);
    }
}];
于 2013-02-25T12:31:12.937 回答