Como baixar um arquivo WAV da web para um local no iPhone usando o NSFileHandle e o NSURLConnection?
-
22-09-2019 - |
Pergunta
Quero baixar um arquivo WAV de um serviço da web, cache -o no iPhone e reproduzir -o usando avaudioplayer. O uso do NSFileHandle e NSurlConnection parece uma solução viável ao lidar com arquivos relativamente grandes. No entanto, depois de executar o aplicativo no simulador, não vejo nenhum arquivo salvo no diretório definido (Nshomedirectory/TMP). Abaixo está o meu código básico. Onde estou indo de errado? Qualquer pensamento é apreciado!
#define TEMP_FOLDER [NSHomeDirectory() stringByAppendingPathComponent:@"tmp"]
- (void)downloadToFile:(NSString*)name
{
NSString* filePath = [[NSString stringWithFormat:@"%@/%@.wav", TEMP_FOLDER, name] retain];
self.localFilePath = filePath;
// set up FileHandle
self.audioFile = [[NSFileHandle fileHandleForWritingAtPath:localFilePath] retain];
[filePath release];
// Open the connection
NSURLRequest* request = [NSURLRequest
requestWithURL:self.webURL
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
#pragma mark -
#pragma mark NSURLConnection methods
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
{
[self.audioFile writeData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
{
NSLog(@"Connection failed to downloading sound: %@", [error description]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[connection release];
[audioFile closeFile];
}
Solução
NSFileHandle fileHandleForWritingAtPath:
requer que o arquivo já exista. Como você está criando o arquivo?
Outras dicas
Onde está seu
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
delegar?
É aqui que você deve escrever/salvar o arquivo.
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
É aqui que você anexa os dados que recebe.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow