handleEventsForBackgroundURLSession从未被调用:ios7后台传输服务

handleEventsForBackgroundURLSession从未被调用:ios7后台传输服务,ios7,service,background,download,Ios7,Service,Background,Download,我现在花了两天时间,我想我需要一些帮助。 当然,我试图在stackOverflow中搜索,但没有找到任何解决问题的方法 我的应用正在下载文件(2MB到100MB) 我正在使用后台传输服务(ios7) 当用户点击一个按钮时,我启动下载,如下所示(他立即按下主页按钮): 我的委托方法工作得很好: - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError

我现在花了两天时间,我想我需要一些帮助。 当然,我试图在stackOverflow中搜索,但没有找到任何解决问题的方法

我的应用正在下载文件(2MB到100MB)

我正在使用后台传输服务(ios7)

当用户点击一个按钮时,我启动下载,如下所示(他立即按下主页按钮):

我的委托方法工作得很好:

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
我还制定了:

- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler {
    NSLog(@"<<<<<<<<<  Save completionHandler >>>>>>>>>>>>>>");

    self.backgroundSessionCompletionHandler = completionHandler;
}


-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
{
    NSLog(@"Background URL session %@ finished events.\n", session);

    AppDelegate * delegate =(AppDelegate *)[[UIApplication sharedApplication] delegate];
    if(delegate.backgroundSessionCompletionHandler)
    {
        void (^handler)() = delegate.backgroundSessionCompletionHandler;
        handler();
    }

}
实际上,我是跟着这首芭蕾舞曲走的:

我的问题是,有时下载文件,有时不下载。文件系统中只存在文件的一部分

但我从来没有接到过HandleeventsforBackgroundurSession的电话,从来没有

在这个问题上有人能帮忙吗


提前感谢

您是如何检测它是否被呼叫的?handleEventsForBackgroundURLSession仅在传输完成且应用程序已被系统终止时调用。。。你不能只是在那里设置一个断点,然后期望命中它。要正确查看它是否被调用,您应该记录一些消息并查找它们。我不知道你怎么能让你的应用程序在模拟器中以这种方式终止。我也在调查此事,如果我发现任何消息,我会带着消息回来
- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler {
    NSLog(@"<<<<<<<<<  Save completionHandler >>>>>>>>>>>>>>");

    self.backgroundSessionCompletionHandler = completionHandler;
}


-(void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session
{
    NSLog(@"Background URL session %@ finished events.\n", session);

    AppDelegate * delegate =(AppDelegate *)[[UIApplication sharedApplication] delegate];
    if(delegate.backgroundSessionCompletionHandler)
    {
        void (^handler)() = delegate.backgroundSessionCompletionHandler;
        handler();
    }

}
@property (copy) void (^backgroundSessionCompletionHandler)();