2014-05-20 1 views
0

뷰에서 세 가지 웹 서비스를 호출해야합니다. 나는 ASIHttprequest 전화를 사용하고 있습니다. 나는 각 웹 서비스를 하나씩 호출 할 것이다. 충돌이 발생합니다.여러 배경 웹 서비스 호출로 인해 충돌이 발생했습니다.

 
-[INetServices respondsToSelector:]: message sent to deallocated instance 0x12629a10 

이 잘못된 요청 오류를 어떻게 극복 할 수 있습니까?

HUDadmin = [[MBProgressHUD alloc] initWithView:self.view]; 

[self.view addSubview:HUDadmin]; 
HUDadmin.delegate = self; 
HUDadmin.labelText [email protected]"Loading"; 
//[HUD hide:YES afterDelay:20]; 
[HUDadmin showWhileExecuting:@selector(adminCheck) onTarget:self withObject:nil animated:YES]; 

은 다음 adminCheck가되는 경우로 :

-(void)adminCheck 
{ 
    INetServices *inetadmin=[[INetServices alloc]init]; 

    NSString *response = [inetadmin doHTTPPostadmincheck:getUserId comm_id:str_commId]; 

    if (!response) { 
     NSLog(@"response nil "); 

     return; 
    } 
    NSMutableArray *jsonarrayResponse=[response JSONValue]; 
    NSLog(@"Admin:%@",jsonarrayResponse); 
    str_adminStatus = [jsonarrayResponse valueForKey:@"admin_status"]; 
    if ([[jsonarrayResponse valueForKey:@"status"] isEqualToString:@"success"]==TRUE) 
    { 
     if ([[jsonarrayResponse valueForKey:@"message"]isEqualToString:@"Admin user!."]==TRUE) 
     { 
      int_adminStatus=1; 
     } 
     else 
     { 
      int_adminStatus=0; 
     } 
    } 
    [self performSelectorOnMainThread:@selector(hideProgress) withObject:nil waitUntilDone:NO]; 

    [self performSelectorOnMainThread:@selector(CommunityDetailwebservice) 
          withObject:nil waitUntilDone:NO]; 
} 
+0

[예외 중단 점] (https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html)을 추가하면 해당 줄이 문제를 일으키는 지 확인할 수 있습니다. 또는 스택 추적을 우리와 공유하십시오. 내가 의심하는 유일한 것은'showWhileExecuting'에있는 동안'hideProgress'를 호출한다는 것입니다. 그 방법은 무엇을 하는가? HUD를 사용하는보기 컨트롤러를 제거하려고 할 가능성이 있습니까? – Rob

+0

예 숨기기 Progess 메서드 숨기기 Hud.then 호출하는 CommunityDetailwebservice .. 같은 프로세스가 발생하고 커뮤니티 세부 정보 webservice 다시 webservice가 호출됩니다 .... – user3388273

답변

0

그것은 좀비의 소스가 지금까지 제공 있었는지의 기초가 뭔지 정확하게 결정하기 어렵다. exception breakpoint 또는 스택 추적으로 범위를 좁힐 수 있습니다.

showWhileExecuting에 대한 호출 내에서 다른 메소드에 대한 비동기 호출을 발견했습니다. 특히 hideProgress이 현재 표시중인 HUD를 숨기려고하기 때문에 조금 걱정됩니다.

이 코드를 리팩토링, 모든 세 개의 웹 서비스를 실행하는 방법에 대한 선택에 HUD를 통과하는 경향 될 것

:

MBProgressHUD *hud = [[MBProgressHUD alloc] initWithView:self.view]; 
[self.view addSubview:hud]; 
[hud showWhileExecuting:@selector(performWebServiceRequests:) onTarget:self withObject:hud animated:YES]; 

그런 식으로, performWebServiceRequests:는 HUD 업데이트와 다양한 수행 동기 웹 서비스 요청 : 당신이 이전에 사람의 성공을 조건으로이 될 수있는 후자 웹 서비스의 호출을 필요한 경우

- (void)performNetworkRequests:(MBProgressHUD *)hud 
{ 
    hud.labelText = @"step 1"; 
    [self adminCheck]; 

    hud.labelText = @"step 2"; 
    [self communityDetailWebService]; 

    hud.labelText = @"step 3"; 
    [self thirdWebService]; 
} 

, 그에 따라 performWebServiceRequests을 조정할 수 있습니다. 예를 들어,이 세 가지 웹 서비스 방법은 실패에 성공시 TRUE, 또는 FALSE을 반환하는 경우, 당신은 다음과 같이 할 수 있습니다 : 당신이 performWebServiceRequests 방법에서 돌아 왔을 때, 다음 HUD가 자동으로 기각 될 것이다, 어쨌든

- (void)performNetworkRequests:(MBProgressHUD *)hud 
{ 
    hud.labelText = @"step 1"; 
    if (![self adminCheck]) 
     return; 

    hud.labelText = @"step 2"; 
    if (![self communityDetailWebService]) 
     return; 

    hud.labelText = @"step 3"; 
    [self thirdWebService]; 
} 

을 너를 위해서.

+0

- (void) requestFinished : (ASIHTTPRequest *) 요청이 함수는 오류가 있습니다 ....라는 세 번째 웹 서비스가 .... hud showWhileExecuting 때문에 발생했습니다 – user3388273

+0

@ user3388273 질문을 업데이트하고 해당 방법을 공유 할 수도 있습니다. – Rob

관련 문제