2012-09-26 1 views
3

표시 자로 MBProgressHUD을 사용하고 있습니다. 그리고 다른 방법을 실행할 때 별도의 스레드를 사용하고 있다는 것을 알고 있습니다. NSURLConnection을 사용하려면 해당 대표단이 제대로 호출하지 않습니다.별도의 스레드가있는 NSURLConnection 위임

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self hudShowWithLabel]; 
} 

-(void)hudShowWithLabel { 
    HUD = [[MBProgressHUD alloc] initWithView: self.view]; 
    [self.view addSubview:HUD]; 

    HUD.delegate = self; 
    HUD.labelText = @"Loading"; 
    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES]; 
} 

-(void)myTask { 
    responseData = [NSMutableData data]; 
    NSLog(@"Is%@ main thread", ([NSThread isMainThread] ? @"" : @" NOT")); 
    NSString *requestURL = @"http://someurl"; 

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]]; 
    (void)[[NSURLConnection alloc] initWithRequest:request delegate: self];  
} 

실행하는 동안, 나는 myTaskMainThread에없는 것을 볼 수 있습니다 여기에

나는 (@implementation 파일)을 가지고있는. 이 문제를 어떻게 해결할 수 있습니까?

[self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:YES]; 

을 그리고 선택기 시작은 다음과 같습니다 :

답변

2

당신은 메인 스레드에있는 NSURLConnection을 찰 수

- (void)start 
{ 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]]; 

    self.connection =[[NSURLConnection alloc] initWithRequest:request 
               delegate:self 
             startImmediately:NO]; 
    [self.connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 
    [self.connection start]; 
} 

github에 대한 예제도 있습니다.

0

NSURLConnection은 실행 루프가 있어야하는 다른 스레드에서 실행됩니다. 스레드의 기본 메소드에서 다음과 같이 실행 루프에 대한 코드를 추가 할 수 있습니다.

while (!finished) 
{ 
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
}