2014-09-16 4 views
7

J'ai NSURLSession qui télécharge plusieurs fichiers. Je met à jour une application ios 7 pour ios 8. Il fonctionne très bien dans ios 7, mais il est respecté contre ios 8 Le délégué meathodNSURLSession URLSessionDidFinishEventsForBackgroundURLSession gestionnaire jamais appelé ios 8. OK dans ios 7

URLSessionDidFinishEventsForBackgroundURLSession: 

est jamais appelé.

Je creusé un peu plus profond et sur les

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location 

et

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

meathods délégué Je vérifie la session pour les tâches de téléchargement restant:

[self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks){ ...} 

Le dernier délégué meathod appelé il y a toujours un élément remaniant dans le tableau downloadTasks. Ce qui est étrange, c'est que cette tâche de téléchargement ne fait pas toujours référence au même fichier, et l'état de ces tâches montre que le téléchargement est terminé.

Encore une fois, fonctionne très bien dans ios7. Le problème se produit uniquement dans ios 8.

+0

Je peux confirmer ce problème. Il y a toujours une tâche à accomplir et cela interrompt l'implémentation. Problème est également discuté sur les forums d'Apple: https://devforums.apple.com/message/1047695#1047695 - semble que des bugs ont été classés: https://devforums.apple.com/message/1021734#1021734 – Krumelur

Répondre

2

Je présume que vous testez sur le simulateur iOS. Si oui, un autre bug est responsable de cette mauvaise conduite. iOS8 Simulator n'a jamais vraiment les applications d'arrière-plan, par conséquent le gestionnaire d'achèvement ne se déclenchera pas. Essayez de courir sur l'appareil et cela fonctionnera.

Vous pouvez trouver une discussion complète dans le Apple forums ou sur ce blog post

+0

It ne fonctionne pas en cours d'exécution sur le simulateur ou l'appareil. Je compile mon application contre ios 7 dans xcode 5.1 et l'installation sur un périphérique ios 8. – nwales

+0

J'ai le même problème, des nouvelles? – Bruno

+0

@nwales Que faites-vous exactement? Le gestionnaire ne se déclenchera que si l'application est en arrière-plan, est toujours en cours d'exécution ou a été arrêtée par iOS. Si vous le terminez manuellement à partir du sélecteur de tâches, il ne se déclenchera pas. – Krumelur

-1

Assurez-vous que vous appelez

if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){ 
     [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; 
    } 

dans votre

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

Cela devrait le fixer sur l'appareil, mais la Le simulateur a un bug qui ne lui permet pas de fonctionner.

Questions connexes