Эй! Мне нужно знать, как я могу запустить приложение iOS для загрузки на фоне приложения (например, запустить загрузку в файле AppDelegate), поэтому изменение ViewControllers не приведет к прерыванию или отмене загрузки. Я также должен иметь возможность получить ход загрузки (0.00000 - 1.00000
), чтобы установить объект UIProgressView
, что также означает, что мне нужна функция - (void)progressDidChangeTo:(int)progress
.Загрузка приложения iOS
ответ
Просто используйте ASIHTTPRequest это способ проще, чем NSURLRequest и делает именно то, что вам нужно. Это examples, который показывает, как загрузить в фоновом режиме и как сообщить о прогрессе.
Я бы не загрузил ничего в AppDelegate напрямую. Вместо этого я бы создал отдельный класс именно для этой цели. Назовем это MyService
. Затем я инициализировал этот класс в своем делете приложения.
Класс может работать как одиночный или может быть передан каждому контроллеру представления, который его требует.
В классе MyService
я бы добавил ASINetworkQueue и несколько методов обработки запросов, когда они будут готовы. Вот код из примеров ASI, которые вы можете использовать:
- (IBAction)startBackgroundDownloading:(id)sender
{
if (!self.queue) {
self.queue = [[[ASINetworkQueue alloc] init] autorelease];
}
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDidFailSelector:@selector(requestWentWrong:)];
[self.queue addOperation:request]; //queue is an NSOperationQueue
[self.queue go];
}
- (void)requestDone:(ASIHTTPRequest *)request
{
NSString *response = [request responseString];
//Do something useful with the content of that request.
}
- (void)requestWentWrong:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}
Если вам нужно установить индикатор выполнения. Я бы просто выставить setDownloadProgressDelegate из ASINetworkQueue в моем классе MYSERVICE и установить его в моем ViewControllers как то:
[[MyService service] setDownloadProgressDelegate: self.myUIProgressView];
BTW. Если вам нужно продолжить скачивание, даже когда ваше приложение выйдет, вы можете установить ShouldContinueWhenAppEntersBackground
по вашему запросу в YES.
вы можете использовать NSURLConnection для запуска асинхронного запроса, который не приведет к замораживанию вашего пользовательского интерфейса. Вы можете сделать это, делая что-то вроде:
NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:url];
connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
[urlRequest release];
для того, чтобы ваш прогресс, которого вы можете использовать:
connection:didReceiveResponse:(NSURLResponse *)response;
делегат вызова для проверки response.expectedContentLength, а затем использовать
connection:didReceiveData:(NSData *)data
для отслеживания количества загруженных данных и расчета процента.
Надеется, что это помогает, Moszi
У меня есть часть загрузки вниз, используя ASIHTTPRequest, мне просто нужно знать, как реализовать загрузку для запуска в фоновом режиме, а не текущий открытый UIViewController, поэтому, когда контроллер просмотра отклонен, загрузка продолжается. –
Вы можете создать одноэлементный класс для управления загрузкой, таким образом этот класс будет вокруг, даже если ваш контроллер просмотра будет удален. (singleton pattern on wikipedia: http://en.wikipedia.org/wiki/Singleton_pattern) – Moszi
- 1. Загрузка экрана для приложения iOS
- 2. Загрузка приложения IOS на AppStore
- 3. Загрузка фотографий из моего приложения iOS поворачивается
- 4. Загрузка приложения в App Store iOS
- 5. iOS Загрузка просмотра при запуске приложения
- 6. Загрузка изображения Только из приложения iOS
- 7. Загрузка приложения iOS в Apple AppStore
- 8. iOS - загрузка в Vimeo из приложения
- 9. Загрузка новой сборки для выпущенного приложения iOS?
- 10. Загрузка данных из приложения iOS одновременно
- 11. Загрузка из приложения на сервер в IOS
- 12. Загрузка приложения к testflight
- 13. Загрузка объекта в ios
- 14. iOS - Фоновая загрузка фотографий
- 15. Загрузка файлов WKWebView ios
- 16. Загрузка приложения/эмулятора приложения Android
- 17. Загрузка приложения и синхронизация приложения
- 18. Загрузка приложения на приложения samsung
- 19. Загрузка на собственную учетную запись YouTube из приложения iOS
- 20. Загрузка нескольких сборок одного и того же приложения iOS
- 21. Загрузка изображения из приложения iOS swift на мой сервер PHP
- 22. Загрузка приложения Xcode 5 на телефон iOS 8
- 23. Загрузка видео на youtube из приложения iOS возвращает 400
- 24. Загрузка 2 приложений iOS в Appstore для одного выпуска приложения?
- 25. Загрузка приложения iOS 7 в Apple App Store Ошибка
- 26. Загрузка приложения в itunes из xcode 7.3.1 для iOS 10
- 27. Загрузка основного XIB приводит к сбою приложения на iOS 3.0
- 28. Загрузка каталога/подкаталога с FTP-сервера в папку приложения ios
- 29. Загрузка приложения iOS получает сообщение об ошибке CFBundleShortVersionString
- 30. iOS Лучшая практика Предварительная загрузка данных для приложения
... Я. Мне нужно, чтобы загрузка выполнялась в файле AppDelegate, так что загрузка не прекратится, когда начнется запуск UIViewController. Мне нужно знать, как я могу получить UIViewController для запуска и доступа к объекту ASIHTTPRequest, но объект должен находиться в AppDelegate. –
@hankweb, я только что обновил свой ответ. –
Проблема заключается в том, что reportFailure будет вызываться в ASIHTTPRequest.m каждый раз, когда мое приложение возвращается с фона. Я использую то же самое, что вы предлагали в своем посте, а значение параметра ShouldContineWhenAppEntersBackground - YES. –