2014-11-22 45 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

描述