2014-11-22 2 views
0

xcode 6에서 ios 앱을 개발 중입니다.로컬 알림 및 (NSURLConnection 백그라운드 다운로드) 작동하지 않습니다.

NSUrlConnection을 사용하여 pdf 파일을 다운로드하는 것을 기반으로합니다.

ios 시뮬레이터에서 앱을 실행할 때 NSUrlConnection은 백그라운드에서 완벽하게 작동하므로 로컬 알림도 마찬가지입니다.

그러나 iPhone을 빌드하고 실행하면 앱이 백그라운드로 이동하고 로컬 알림이 표시되지 않을 때 nsurl 연결이 중지됩니다.

나를 솔루션으로 안내 할 수 있습니까?

편집 :

나는 응용 프로그램이 배경에 갈 때 요청이 유휴 선회 할 수 있다는 것을 발견했다. 하지만 doesthis는 아이폰에서만 발생하며 시뮬레이터에서는 그렇지 않습니다. 앱이 백그라운드로 이동하면 계속 다운로드하려면

NSURL *url = [NSURL URLWithString:[BookArray[0] objectForKey:@"Link"]]; 

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:2.5]; 


    NSURLConnection *PDFConnection; 


    PDFConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES ]; 

답변

1

당신은 단순히 당신의 대리자 메서드는 호출 해에 다음 beginBackgroundTaskWithExpirationHandler:

@property (nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskID; 

@synthesize backgroundTaskID; 

... 

NSURL *url = [NSURL URLWithString:[BookArray[0] objectForKey:@"Link"]]; 

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:2.5]; 


NSURLConnection *PDFConnection; 


PDFConnection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES ]; 

self.backgroundTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ 

    [connection cancel]; 
}]; 

를 호출 할 수

내 코드입니다 다운로드 완료시 endBackgroundTask:을 완료하면

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    // Error Handling 
    ... 

    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // Downloaded 

    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskID]; 
}
당신은 here


에 대해 읽고이 answer

에 설명 된대로 일정 알림에 대한 권한을 얻을 것을 확신 할 수