AFNetworking Error Domain= NSPOSIXErrorDomain Code= 12 "A operação não pôde ser concluída. Não é possível alocar memória

StackOverflow https://stackoverflow.com/questions/8875122

Pergunta

Estou enviando muitos arquivos de imagem via AfNetworking para um servidor Rails.No limite e às vezes 3G, recebo este erro: Error Domain= NSPOSIXErrorDomain Code= 12 "A operação não pôde ser concluída. Não é possível alocar memória".

Este é o código que estou usando para enviar os arquivos: https://gist.github.com/cc5482059ae3023bdf50

Existe uma maneira de consertar isso?

Online, algumas pessoas sugerem que uma solução alternativa seria transmitir os arquivos.Não consegui encontrar um tutorial sobre streaming de vários arquivos usando AFNetworking.Como posso fazer isso?

Foi útil?

Solução

Qual o tamanho das imagens?E quantos você está tentando enviar?

Não consigo encontrar uma maneira fácil de implementar um NSInputStream usando AFNetworking, mas há definitivamente uma coisa que você deve tentar, que é evitar colocar objetos grandes no pool de liberação automática.Quando você está criando grandes instâncias NSData em um loop for, e elas vão para o pool de liberação automática, toda a memória permanece enquanto o loop dura.Esta é uma maneira de otimizá-lo:

for (int i=0; i<[self.sImages count]; i++) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSData *imageData = UIImageJPEGRepresentation([self.sImages objectAtIndex:i], 0.7);
    [formData appendPartWithFileData:imageData name:@"pics[]" fileName:@"avatar.jpg" mimeType:@"image/jpeg"];
    pool drain];
}

Ou, se você estiver usando LLVM3:

for (int i=0; i<[self.sImages count]; i++) {
    @autoreleasepool {
        NSData *imageData = UIImageJPEGRepresentation([self.sImages objectAtIndex:i], 0.7);
        [formData appendPartWithFileData:imageData name:@"pics[]" fileName:@"avatar.jpg" mimeType:@"image/jpeg"];
    }
}

Outras dicas

Sei que já faz um tempo que essa pergunta foi feita, mas preciso dar minha opinião sobre o assunto.

Depois de passar a maior parte da semana tentando descobrir essas coisas, é aqui que estou agora:

  • Este problema acontece comigo em um antigo iPhone 4 ligeiramente danificado com iOS 5.1.1
  • Não consigo reproduzi-lo em um iPhone 4S não danificado com o mesmo iOS 5.1.1

Pode ser por causa de uma rede defeituosa pelo próprio hardware do telefone ou pode ser sobre a necessidade de limitar a largura de banda (ou apenas um bug em NSURLConnection):

http://aws.amazon.com/articles/0006282245644577

https://forums.dropbox.com/topic.php?id=25351

Erro POSIX 12 (" Não é possível alocar memória ") durante o upload de arquivos de um iPhone

Eu teria mudado para ASIHTTPRequest, mas não é mais mantido, então agora vale a pena implementá-lo. Talvez eu ainda deva tentar AFNetworking, mas estou realmente começando a pensar que este é um problema que já foi corrigido no iOS (ou pode ser um iPhone de má qualidade no meu caso).

Mas não consigo encontrar uma explicação simples para isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top