2015-08-14 3 views
1

Моя цель - отправить данные/изображение на сервер, когда приложение находится в фоновом режиме. Из iOS7 мы можем сделать это с помощью фоновой выборки. Но фоновая выборка предлагает только 30-секундный лимит времени. Данные, которые я отправляю на сервер, могут занимать больше времени, так как у него больше изображений. В то время как googling я наткнулся на Фоновое обслуживание передачи, которое предлагает неограниченное время для загрузки/загрузки данных в фоновом режиме. Возможно ли инициировать службу фонового переноса в коде извлечения фона? Если да, то как справиться с этим.Инициирование услуги передачи фона в фоновом режиме iOS

+0

Проверьте nsurlsession, она позволяет делегировать процесс загрузки на прошивку, который будет звонить вам при загрузке файла – user996142

ответ

0

Всякий раз, когда вы хотите, чтобы начать загрузку/выгрузку (в вашем случае во время вашего 30secs на фоне выборки) выполнить следующие строки:

 NSString *downloadURLString = //Your link here; 
     NSURL* downloadURL = [NSURL URLWithString:downloadURLString]; 

     NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL]; 


     // Create a background session 
     static NSURLSession *session = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     NSString *identifier = @"com.yourcompany.yourapp"; 
     NSURLSessionConfiguration* sessionConfig = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]; 

     session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil]; 
    }); 


     //Init a NSURLSessionDownloadTask with the just-created request and resume it 
     NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request]; 
     [task resume]; 

    }); 

Кроме того, не забывайте применять эти методы делегата:

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

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask 
              didWriteData:(int64_t)bytesWritten 
             totalBytesWritten:(int64_t)totalBytesWritten 
           totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite; 


- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask 
             didResumeAtOffset:(int64_t)fileOffset 
            expectedTotalBytes:(int64_t)expectedTotalBytes; 

для детального образца, посмотри на this образец приложении

Смежные вопросы