2010-02-22 6 views
1

NSURLDownload를 사용하여 URL을 다운로드하려고하지만 다운로드가 시작되지 않습니다. 계속하기 전에 GNUStep을 사용하고 있다고 말해야합니다. 다음과 같이NSURL 다운로드가 시작되지 않습니다

내 프로젝트의 개요는 다음과 같습니다

에서 MyClass.h :

@interface MyClass : Object { 

} 

-(void)downloadDidBegin:(NSURLDownload*)download; 
-(void)downloadDidFinish:(NSURLDownload*)download; 

@end 

Main.m

int main() 
{ 
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 

    NSLog(@"creating url"); 
    NSURL* url = [[[NSURL alloc] initWithString:@"http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/NSURLRequest_Class.pdf"] autorelease]; 

    NSLog(@"creating url request"); 
    NSURLRequest* url_request = [[[NSURLRequest alloc] initWithURL:url] autorelease]; 

    NSLog(@"creating MyClass instance"); 
    MyClass* my_class = [[MyClass alloc] init]; 

    NSLog(@"creating url download"); 
    NSURLDownload* url_download = [[[NSURLDownload alloc] initWithRequest:url_request 
                   delegate:my_class] autorelease]; 

    [pool drain]; 
} 

나는 NSLog의 MyClass에 모두 기능에의 그들 중 어느 쪽이 맞았다. 다운로드를 시작하려면 무엇을해야합니까? 아니면 GNUStep의 문제입니까?

+0

당신은 NSObject가 아닌 Object를 서브 클래 싱 하시겠습니까? 대리모를 콜렉션 또는 뭔가에 넣을 때를 대비해서 NSObject를 사용해야 할 것입니다. (또한, 당신은 정말로 "MyClass"보다 더 나은 이름을 생각해야하고, 메모리 관리 규칙에 따라 객체의 수명을 적절히 관리해야합니다 : http://developer.apple.com/mac/library/documentation/General/Conceptual/DevPedia -CocoaCore/MemoryManagement.html) –

답변

2

NSURL 다운로드가 백그라운드에서 수행되므로 initWithRequest:delegate:에 대한 호출이 즉시 반환됩니다.

프로그램이 실행 루프 (응용 프로그램에서는 자동으로 처리되지만 도구에서는 수동으로 처리해야 함)로 제어를 전달하지 않으면 나머지 main() 함수를 실행하고 종료합니다.

또한, 대리인의 메시지는 실행 루프 내에서 전송되는, 그래서도 즉시 종료하지 않았다() 주 경우, 코드는 첫 번째 'NSRunLoop 중 하나를 호출하지 않는 한 대표는 여전히 downloadDidBegin: 또는 downloadDidFinish:을받을 것 실행 방법. 런 루프에 대한 추가 정보를 원하시면

[[NSRunLoop currentRunLoop] run];

Thread Programming Guide 체크 아웃 :

[pool drain]; 직전에, 코드에 다음 줄을 추가합니다.

관련 문제