2014-11-28 2 views
0

내 응용 프로그램 대리인에서 NSURLSessionDataTask을 백그라운드 페치에서 실행하려고하지만 완료 핸들러에서 유효한 데이터를 얻지 만 앱이 메서드를 실행하지 않습니다. 여기 내 코드는NSURLSessionDataTask 응용 프로그램의 대표자

에서
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 

    NSURLSession *serverConfigure = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSessionConfiguration *serverSession = [NSURLSession sessionWithConfiguration:serverConfigure delegate:self delegateQueue:nil]; 

    NSURLSessionDataTask *serverDownload = [serverSession dataTaskWithURL:[NSURL URLWithString:@"myurl"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     NSArray *downloadedData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

     [self handleData:downloadedData]; 

    }]; 

    [serverDownload resume]; 

} 
+1

완료 처리기가 UI 업데이트를 수행해야하는 주 스레드에서 실행되지 않습니다. –

+0

감사합니다. 귀하의 회신에 대한하지만 메소드를 'dispatch_async (dispatch_get_main_queue()'에 배치했지만 여전히 응답이 없습니다. –

+0

) 약간의 설명이 필요할 수 있습니다. 완료 핸들러에서 유효한 데이터를 가져 오는 경우 두 완료 핸들러 중 어느 것을 말하고 있습니까? 그리고 "앱이 그 방법을 해고하지 않는다"고 말할 때, 어떤 방법을 말하는 겁니까? 귀하의 "handleData"? –

답변

0

backgroundFetch 배경 이 메소드를 호출 응용 프로그램 - (무효) 응용 프로그램 : (UIApplication *) 응용 프로그램의 performFetchWithCompletionHandler : (무효 (^) (UIBackgroundFetchResult)) completionHandler {

이를 위해 배경 가져 오기 모드를 활성화해야합니다. ...이 링크를 통해 이동하십시오. http://www.appcoda.com/ios7-background-fetch-programming/

+0

답장을 보내 주셔서 감사합니다. 백그라운드 가져 오기는 자동 알림을 누를 때 자체 메서드가 호출되는 방식으로 작동하므로 NSURLSession을 실행하고 디버거에서 데이터를 반환합니다. 문제는 '[self handleData : downloadedData];'메서드를 호출하지 않는다는 것입니다. –

+1

알림을 받으면 .... 알림 ur를 클릭하여 "응용 프로그램이 원격 알림을 받았습니다 ..."메서드가 호출됩니다 ... ur 메서드를 사용하여 데이터 작업을 확인합니다 ... 해당 체크에서 완료 블록을 반환하는지 여부를 확인합니다. .. completiton (데이터, 응답, 오류); 이 문제를 해결할 것입니다 – Bevan