0

i want to download some webpages ,but this example code seems doesn't work. it prints "begin download" and then exits,why the delegates method does not be executed? what's wrong in the example code? thanks

main.m

#import <Foundation/Foundation.h>
#import "Test.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Test * test = [[Test alloc]init];
        [test downloadData];

    }
    [NSThread sleepForTimeInterval:21.0f];

    return 0;
}

Test.h


#import <Foundation/Foundation.h>

@interface Test : NSObject <NSURLConnectionDelegate,NSURLConnectionDataDelegate,NSURLConnectionDownloadDelegate>
@property (retain) NSMutableData * receivedData;
@property (retain) NSURLConnection * theConnection;
- (void) downloadData;
@end

Test.m

#import "Test.h"

@implementation Test
- (void) downloadData
{
    NSURLRequest *theRequest=
      [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sf.net/"]                                  
                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                   timeoutInterval:60.0];

    _receivedData = [NSMutableData dataWithCapacity: 0];



    [NSURLConnection sendSynchronousRequest:theRequest
                          returningResponse:nil
                                      error:nil];
    NSLog(@"begin download");

    if (!_theConnection) {

        _receivedData = nil;

        // Inform the user that the connection failed.

    }
}

enter code here

#pragma mark -
#pragma mark NSURLConnectionDataDelegateenter code here methods

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{
    NSLog(@"1");
    [_receivedData setLength:0];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{
    NSLog(@"2");
    [_receivedData appendData:data];

}
- (void)connection:(NSURLConnection *)connection

  didFailWithError:(NSError *)error

{
    NSLog(@"3");
    _theConnection = nil;

    _receivedData = nil;



    // inform the user

    NSLog(@"Connection failed! Error - %@ %@",

          [error localizedDescription],

          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);

}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

{


    NSLog(@"4");
    NSLog(@"Succeeded! Received %lu bytes of data",(unsigned long)[_receivedData length]);



    _theConnection = nil;

    _receivedData = nil;

}

-(void) connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL
{
    NSLog(@"5");
}
@end
4

1 回答 1

0

你有两种方式来同步或异步:

在同步中没有调用任何代表,正确的行是 https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/occ/ clm/NSURLConnection/sendSynchronousRequest:returningResponse:error:

_receivedData = [NSURLConnection sendSynchronousRequest:theRequest
                          returningResponse:nil
                                      error:nil];
    NSLog(@"begin download");

    if (!_theConnection) {

        _receivedData = nil;

        // Inform the user that the connection failed.

    }

在异步中你需要使用 – initWithRequest:delegate: https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/occ/instm /NSURLConnection/initWithRequest:delegate:

[NSURLConnection alloc] initWithRequest:delegate:theRequest
                          delegate:self];

NSLog(@"begin download");
于 2013-09-22T06:52:32.080 回答