안녕하세요! 나는 iOS 응용 프로그램이 응용 프로그램 백그라운드에서 다운로드를 시작하도록 (AppDelegate 파일에서 다운로드를 실행하는 것과 같이) 어떻게 ViewController를 변경해도 다운로드가 중단되거나 취소되지 않도록 할 수 있어야합니다. 또한 UIProgressView
개체를 설정하려면 다운로드 진행률 (0.00000 - 1.00000
)을 얻을 수 있어야합니다. 이는 - (void)progressDidChangeTo:(int)progress
기능이 필요하다는 것을 의미합니다.iOS 애플리케이션 배경 다운로드
답변
그냥이 NSURLRequest보다 훨씬 쉽게 그리고 정확하게 당신이 필요로하지 ASIHTTPRequest를 사용합니다. 백그라운드에서 다운로드하는 방법과 진행률을보고하는 방법을 보여주는 examples입니다.
AppDelegate에서 직접 아무것도 다운로드하지 않습니다. 대신 나는 그 목적을 위해서 분리 된 클래스를 만들 것이다. Let 's call 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];
}
진행률 표시 줄을 설정해야하는 경우. 난 그냥 내이면 MyService 클래스에 ASINetworkQueue의 setDownloadProgressDelegate 노출과 같은 내 ViewControllers에서 설정합니다 :
[[MyService service] setDownloadProgressDelegate: self.myUIProgressView];
을 BTW. 앱이 종료 된 후에도 계속 다운로드해야하는 경우 ShouldContinueWhenAppEntersBackground
요청을 YES로 설정할 수 있습니다.
NSURLConnection을 사용하여 UI를 동결시키지 않는 비동기 요청을 시작할 수 있습니다.
connection:didReceiveData:(NSData *)data
을 사용하여 다음 response.expectedContentLength을 검사하고
connection:didReceiveResponse:(NSURLResponse *)response;
대표 전화 : 당신이 사용할 수 있습니다 진행을하기 위해
NSURLRequest *urlRequest = [[NSURLRequest alloc] initWithURL:url];
connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
[urlRequest release];
: 당신은 뭔가를 수행하여 작업을 수행 할 수 있습니다
다운로드 한 데이터의 양을 추적하고 백분율을 계산하십시오. 이 도움이
희망, Moszi는
ASIHTTPRequest를 사용하여 다운로드 할 수있는 부분이 있습니다. 현재 열려있는 UIViewController가 아닌 백그라운드에서 시작되도록 다운로드를 구현하는 방법을 알아야하므로,보기 컨트롤러가 닫히면 다운로드가 계속됩니다. –
다운로드 관리를위한 싱글 톤 클래스를 만들 수 있습니다. 이렇게하면 뷰 컨트롤러가 할당 해제 된 경우에도이 클래스가 주위에있게됩니다. (싱글 톤 패턴 위키 백과 : http://en.wikipedia.org/wiki/ 싱글 톤 패턴) – Moszi
- 1. MIME 애플리케이션/다운로드
- 2. iPhone 애플리케이션 다운로드 레벨
- 3. iphone : iOS 3.2의 iOS 4.2에서 애플리케이션 실행
- 4. iOS 배경 오디오 아이콘
- 5. 배경 위치 추적 : iOS
- 6. iOS 라이트 리넨 배경?
- 7. iOS 배경 이미지 설정
- 8. iOS 알림 (배경)
- 9. IOS 대기열 비동기 다운로드
- 10. iOS 웹 앱의 배경 오디오
- 11. AVFoundation IOS : 배경 음악 재생
- 12. ios SDK 3.X 다운로드
- 13. IOS SDK가있는 Xcode 3.2.5 다운로드
- 14. Google 애플리케이션 엔진에서 자세한 로그 다운로드
- 15. 연락처 애플리케이션 용 Android 코드 다운로드
- 16. 수신 전화가 iOS 배경 앱을 깨 웁니까?
- 17. iOS 4에서 많은 이미지를 큐 다운로드 중입니까?
- 18. 은 iOS SDK를 다운로드 할 수 있습니까?
- 19. 캔트 다운로드 http://adcdownload.apple.com/ios/ios_sdk_4.2__final/xcode_3.2.5_and_ios_sdk_4.2_final.dmg
- 20. ios 앱에서 다운로드 한 파일의 디스크 공간
- 21. 다운로드 파일 및 재개 용 iOS 라이브러리
- 22. iOS - 다운로드 페이지를 앱 스토어에로드 하시겠습니까?
- 23. 다운로드 한 파일의 백분율을 얻는 방법 IOS
- 24. iOS SDK 3.1.2 및 시뮬레이터 다운로드
- 25. 비즈니스 프로세스 자동화 - 파일 asp.net 애플리케이션 로그인 및 다운로드
- 26. iOS -지도 애플리케이션과 다른 위치 인식 타사 애플리케이션
- 27. iOS 시뮬레이터에서 AppleScript로 애플리케이션 단추를 식별 할 수 있습니까?
- 28. IOS 4.2 및 Xcode 3.2가 적용된 범용 애플리케이션
- 29. iPhone/iPad/iOS 애플리케이션 유형 - 모달보기, 탭, 기타?
- 30. Google 애플리케이션 엔진 애플리케이션
... 나는 있습니다. 다운로드를 시작한 UIViewController가 시작될 때 중단되지 않도록 AppDelegate 파일에서 다운로드가 필요합니다. UIViewController를 시작하고 ASIHTTPRequest 객체에 액세스 할 수 있지만 AppDelegate에 객체를 보유하는 방법을 알아야합니다. –
@hankweb, 방금 내 대답을 업데이트했습니다. –
문제는 reportFailure가 내 앱이 백그라운드에서 돌아올 때마다 ASIHTTPRequest.m에서 호출된다는 것입니다. 게시물에서 제안한 것과 같은 방법으로 ShouldContineWhenAppEntersBackground를 YES로 설정했습니다. –