2012-11-12 4 views
0

나는 다른 timetstamp와 함께 URL을 호출하는 메소드를 호출하고 있습니다. 그러나 데이터 처리는 내가 정의한 시간보다 오래 걸릴 수 있습니다. 아래 부분PerformSelector-iOS를 호출하는 최적의 방법

[self performSelector:@selector(process) withObject:nil afterDelay:1.6]; 

는 방법

-(void)process 
{ 
    timestamp=[NSString stringWithFormat:@"%1.f",progressValue]; 
    NSString *[email protected]"&bandschema=4"; 
    NSString *url6=[NSString stringWithFormat:@"http://contour.php? callback=contourData%@&type=json&timestamp=%@%@",timestamp,timestamp,contour];   
    NSURL *url1=[NSURL URLWithString:url6]; 
    __weak ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1]; 
     [request1 setCompletionBlock:^{ 
      responseString = [request1 responseString]; 
       [self plotPoint:self.responseString]; 

     }]; 
     [request1 setFailedBlock:^{ 

      NSError *error=[request1 error]; 
      NSLog(@"Error: %@", error.localizedDescription); 
     }]; 
     [request1 startAsynchronous]; 
    } 

호출이 부분 데이터를 분석 시작점이다 나타낸다.

-(void)plotPoint:(NSString *)request 
{ 
    NSArray *polygonArray = [[dict objectForKey:@"data"]valueForKey:@"polygon"]; 
    NSArray *valleyPolygonArray = [[dict objectForKey:@"valley"]valueForKey:@"polygon"]; 
    CLLocationCoordinate2D *coords; 
} 

그러나 인터넷 연결이 좋지 않은 경우 특히 시간 간격이 새 데이터를 얻기에 충분하지 않습니다.

제발 나를 안내해 주시겠습니까? 문제를 어떻게 처리 할 수 ​​있습니까? 최적의 솔루션은 무엇입니까?

+0

데이터를 어떻게 가져 오나요? 반환 할 때 서버 응답을 처리 할 수 ​​있어야하며 1.6 초마다 호출 할 필요가 없습니다. – danielM

+0

이것은 현재 사용중인 끔찍한 반 패턴입니다. NSURLConnection 외에도 이유가 있습니다. 위임 메서드 또는 콜백 블록이 있습니다 ... –

+0

위의 업데이트 된 코드를 참조하십시오. –

답변

1

몇 가지 코드를 제공해 주시겠습니까? 은 기본적으로 당신이 요청 완료 대리자를 호출

여기에 몇 가지 추가 정보를 원하시면에서 작업을 수행해야합니다 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

http://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSURLConnectionDelegate

편집 :
나는 아직도 확실히 그 경우 이해하지만, 보이지 않는 도와 드리겠습니다 :

__weak ASIHTTPRequest *request1 = [ASIHTTPRequest requestWithURL:url1]; 
     [request1 setCompletionBlock:^{ 
      responseString = [request1 responseString]; 
       [self plotPoint:self.responseString]; 

     //if (something) 
      [self process]; 
     }]; 
+0

위의 업데이트 된 코드를 참조하십시오. –

+0

자, 비동기 호출을 사용하고 있습니다. 그런 식으로하지는 않겠지 만 완료 블록에서 "프로세스"를 호출 할 수 있습니다 (일부 조건에서는 무한 루프를 방지하기 위해 ..). – Barracuda

+0

업데이트 된 설명을 참조하십시오. –

관련 문제