2012-04-19 4 views
2

URL 요청이 일괄 전송 된 다음 결과를 수신하는 '포수'클래스가 있습니다. 페이스 북의 그래프 API SDK를 통해이 작업을 수행하므로 실제 NSURL을 제어 할 수 없습니다. 내 문제는 모든 요청이 되돌아 오기 전까지 다음 결과 프로토콜을 실행하지 않는다는 것입니다.하지만 3G를 통해 특히 수백 개가 돌아 왔을 때 항상 돌아 오는 것은 아닙니다. 주어진 요청에 대해 '포기'하는 좋은 방법은 무엇입니까? FB api에 익숙하지 않은 사람들을 위해 실제 요청이 작동하는 방식은 facebook 객체를 초기화 한 다음 facebook 객체에서 데이터를 요청하고 return delegate를 지정하는 것입니다. 따라서 각각의 개별 요청에 대해 returnDelegate (포수)가 있습니다. 각 요청마다 고유하게 초기화 할 수 있습니다.iOS 용 페이스 북 API로 요청 시간 제한

UPDATE : 어느 정도의 시간이 경과하면 위임 객체를 신호합니다 위에서 논의한 바와 같이

- (FBRequest*)requestWithMethodName:(NSString *)methodName 
          andParams:(NSMutableDictionary *)params 
         andHttpMethod:(NSString *)httpMethod 
         andDelegate:(id <FBRequestDelegate>)delegate { 
    NSString * fullURL = [kRestserverBaseURL stringByAppendingString:methodName]; 
    return [self openUrl:fullURL 
        params:params 
       httpMethod:httpMethod 
       delegate:delegate]; 
} 

- (FBRequest*)openUrl:(NSString *)url 
       params:(NSMutableDictionary *)params 
      httpMethod:(NSString *)httpMethod 
      delegate:(id<FBRequestDelegate>)delegate { 

    [params setValue:@"json" forKey:@"format"]; 
    [params setValue:kSDK forKey:@"sdk"]; 
    [params setValue:kSDKVersion forKey:@"sdk_version"]; 
    if ([self isSessionValid]) { 
     [params setValue:self.accessToken forKey:@"access_token"]; 
    } 

    [self extendAccessTokenIfNeeded]; 

    FBRequest* _request = [FBRequest getRequestWithParams:params 
               httpMethod:httpMethod 
               delegate:delegate 
               requestURL:url]; 
    [_requests addObject:_request]; 
    [_request addObserver:self forKeyPath:requestFinishedKeyPath options:0 context:finishedContext]; 
    [_request connect]; 
    return _request; 
} 

- (void)connect { 

    if ([_delegate respondsToSelector:@selector(requestLoading:)]) { 
     [_delegate requestLoading:self]; 
    } 

    NSString* url = [[self class] serializeURL:_url params:_params httpMethod:_httpMethod]; 
    NSMutableURLRequest* request = 
    [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] 
          cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
         timeoutInterval:kTimeoutInterval]; 
    [request setValue:kUserAgent forHTTPHeaderField:@"User-Agent"]; 


    [request setHTTPMethod:self.httpMethod]; 
    if ([self.httpMethod isEqualToString: @"POST"]) { 
     NSString* contentType = [NSString 
          stringWithFormat:@"multipart/form-data; boundary=%@", kStringBoundary]; 
     [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; 

     [request setHTTPBody:[self generatePostBody]]; 
    } 

    _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    self.state = kFBRequestStateLoading; 
    self.sessionDidExpire = NO; 
} 
+0

요청 클래스 란 무엇입니까? 일부 코드? – paulmelnikow

+0

@noa가 방금 일부를 추가했습니다. 그것을 이해하는 데 도움이 필요합니다. 특정 시간에 도달 한 후 대리인에게 메시지를 보내는 각 요청에 리터럴 타이머를 추가하는 해킹 방법이 있습니까? – JoshDG

+0

물론, NSTimer가 그렇게 할 수 있다고 생각합니다. 동시에 요청을 실행하면 모든 요청에 ​​대해 하나의 타이머를 사용할 수 있습니다. – paulmelnikow

답변

2

, 당신은 NSTimer를 인스턴스화하여 자신 만의 시간 제한을 구현할 수 있습니다 FB-API의 일부 코드 .

관련 문제