2014-11-22 47 views
0

我正在開發一個iOS 6應用程序。本地通知和(NSURLConnection後臺下載)不起作用

它基於使用NSUrlConnection下載pdf文件。

當我在ios模擬器上運行應用程序時,NSUrlConnection在後臺完美工作,所以本地通知也是如此。

但是當我在iPhone上構建並運行它時,應用程序轉到後臺並且不顯示本地通知時nsurlconnection停止。

有人可以指導我解決問題嗎?

編輯:

我發現,當應用程序被切換到後臺的請求可以轉向空閒。 但爲什麼doesthis只發生在iPhone,而不是在模擬器上?

這是我的代碼:

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

描述