[iphone] UIprogressView 업데이트 다운로드 진행 상태 확인



Answers

여기에서 동기 요청을 사용 중입니다.

이 문서에서는 다음과 같이 설명합니다. - 동기로드는 클래스에서 사용할 수있는 비동기로드 코드 위에 작성됩니다. 비동기 적재 시스템이이로드 요청을 위해 특별히 생성 된 스레드에 대한 URL로드를 수행하는 동안 호출 스레드가 차단됩니다. 동기로드를 수행하기 위해 호출 스레드에서 특별한 스레딩 또는 실행 루프 구성이 필요하지 않습니다.

여기에 클래스 참조를 참조 하십시오.

클래스 참조를 읽은 후에는 비동기 요청을 보내거나 요청을 초기화하고, 대리자를 설정하고, 시작할 수 있습니다.

Question

내 응용 프로그램은 인터넷에서 비디오를 다운로드하고 iPhone에 저장합니다.

나는이 코드를 사용하고있다.

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];

[request setHTTPMethod:@"GET"];
NSError *error;
NSURLResponse *response;


NSString *documentFolderPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *videosFolderPath = [documentFolderPath stringByAppendingPathComponent:@"videos"]; 

//Check if the videos folder already exists, if not, create it!!!
BOOL isDir;
if (([fileManager fileExistsAtPath:videosFolderPath isDirectory:&isDir] && isDir) == FALSE) {
    [[NSFileManager defaultManager] createDirectoryAtPath:videosFolderPath withIntermediateDirectories:YES attributes:nil error:nil];
}

NSString *filePath = [videosFolderPath stringByAppendingPathComponent:@"name.mp4"];

if ([fileManager fileExistsAtPath:filePath ] == YES) {
    NSLog (@"File exists");
}
else {
    NSLog (@"File not found");
    NSData *urlData;
    NSString *downloadPath = @"http://www.mywebsite.com/name.mp4";
    [request setURL:[NSURL URLWithString:downloadPath]];
    urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    BOOL written = [urlData writeToFile:filePath atomically:NO];
    if (written)
        NSLog(@"Saved to file: %@", filePath);
    else {NSLog(@"problem");}
}

모두 정상적으로 작동하지만 진행 상태보기를 추가하여 다운로드 상태를 나타냅니다.

문제 (나는 생각하지만 확실하지 않다)는 NSURLConnection 자체가 대리자가 아니기 때문에

- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)data 

또는

-(void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite{

절대로 불리지 않는다.

나는 사용하려고 시도했다.

urlData = [[NSURLConnection alloc] initWithRequest:request delegate:self];

하지만 파일을 쓰려고하면 응용 프로그램이 충돌합니다.

[urlData writeToFile:filePath atomically:NO];

내가 무엇을 할 수 있을지? 감사




Related