2014-11-22 4 views
0

Я разрабатываю приложение ios на xcode 6.Локальные уведомления и (Загрузка NSURLConnection) не работает

Он основан на загрузке pdf-файлов с использованием NSUrlConnection.

При запуске приложения на симуляторе ios NSUrlConnection отлично работает в фоновом режиме, а также локальные уведомления.

Но когда я создаю и запускаю его на своем iPhone, nsurlconnection останавливается, когда приложение переходит в фоновый режим, и локальные уведомления не отображаются.

Может ли кто-нибудь направить меня к решению?

Edit:

я обнаружил, что запрос может быть поворот на холостом ходу, когда приложение переходит в фоновый режим. Но почему это происходит только на 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