2014-09-16 11 views
7

Mam NSURLSession, która pobiera wiele plików. Ja aktualizowania aplikacji iOS 7 dla iOS 8. Współpracuje w iOS 7, ale gdy spełnione przeciwko iOS 8 Delegat meathodNSURLSession URLSessionDidFinishEventsForBackgroundURLSession handler nigdy nie nazywał się ios 8. OK w ios 7

URLSessionDidFinishEventsForBackgroundURLSession: 

nigdy nie jest wywoływana.

kopany głębiej i na

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

i

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

delegatów meathods jestem sprawdzanie sesji dla pozostałych zadań pobierania:

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

na ostatni delegate meathod o nazwie zawsze zawiera jeden element remaning w tablicy downloadTasks. Dziwne jest to, że to zadanie pobierania nie zawsze odnosi się do tego samego pliku, a status tych zadań pokazuje, że pobieranie zostało zakończone.

Znowu działa poprawnie w ios7. Problem występuje tylko w ios 8.

+0

Mogę potwierdzić ten problem. Zawsze jest jedno zadanie, które łamie implementację. Problem jest również dyskutowany na forach Apple: https://devforums.apple.com/message/1047695#1047695 - wygląda na to, że zgłoszono błędy: https://devforums.apple.com/message/1021734#1021734 – Krumelur

Odpowiedz

2

Zakładam, że testujesz na symulatorze iOS. Jeśli tak, inny błąd jest odpowiedzialny za to niewłaściwe zachowanie. Symulator iOS8 nigdy nie działa tak naprawdę na tle aplikacji, dlatego obsługa zakończenia nie zostanie uruchomiona.

Spróbuj uruchomić urządzenie i będzie działać.

można znaleźć pełną dyskusję w Apple forums lub o tym blog post

+0

nie działa podczas działania na symulatorze lub urządzeniu. Kompiluję swoją aplikację przeciwko ios 7 w xcode 5.1 i instaluję na urządzeniu ios 8. – nwales

+0

Mam ten sam problem, jakieś wieści? – Bruno

+0

@nwales Co dokładnie robisz? Program obsługi zostanie uruchomiony tylko wtedy, gdy aplikacja jest w tle, nadal działa lub została zakończona przez system iOS. Jeśli zakończysz je ręcznie z przełącznika zadań, nie uruchomi się. – Krumelur

-1

Upewnij się nazywają

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

w swojej

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

To powinno rozwiązać go na urządzeniu, ale symulator ma błąd, który nie pozwala mu działać.

Powiązane problemy