0

いくつかの Web ページをダウンロードしたいのですが、このサンプル コードは機能しないようです。「begin download」と表示されて終了しますが、デリゲート メソッドが実行されないのはなぜですか? サンプルコードのどこが間違っていますか? ありがとう

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

Synchronous または Asynchonous には 2 つの方法があります。

同期ではデリゲートは呼び出されず、右側の行は https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSURLConnection_Class/Reference/Reference.html#//apple_ref/occ/ですclm/NSURLConnection/sendSynchronousRequest:returningResponse:エラー:

_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:デリゲート:

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

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