Dominio de error AFNetworking = NSPOSIXErrorDomain Code = 12 "La operación no se pudo completar. No se puede asignar memory

Estoy enviando muchos files de imágenes a través de AfNetworking a un server de Rails. En el borde y, a veces, 3G obtengo este error: Error Domain = NSPOSIXErrorDomain Code = 12 "La operación no se pudo completar. No se puede asignar memory".

Este es el código que estoy usando para enviar los files: https://gist.github.com/cc5482059ae3023bdf50

¿Hay alguna forma de arreglar esto?

En línea, algunas personas sugieren que una solución sería transmitir los files. No he podido encontrar un tutorial sobre la transmisión de múltiples files utilizando AFNetworking. ¿Cómo puedo hacer esto?

¿Qué tan grandes son las imágenes? ¿Y cuántos intentas enviar?

No puedo encontrar una manera fácil de implementar un NSInputStream usando AFNetworking , pero definitivamente hay una cosa que debes intentar, que es evitar poner objects grandes en el grupo de autorelease. Cuando está creando grandes instancias de NSData insinde a for loop, y esas van al set de autorelease, toda esa memory permanece durante todo el time que dura el ciclo. Esta es una forma de optimizarlo:

 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]; } 

O bien, si está utilizando 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"]; } } 

Sé que ha pasado un time desde que se hizo esta pregunta, pero solo tengo que dar mis dos centavos al respecto.

Después de pasar la mayor parte de la semana tratando de entender estas cosas, aquí estoy donde estoy ahora mismo:

  • Este problema me sucede en un iPhone 4 ligeramente golpeado con iOS 5.1.1
  • Parece que no se puede reproducir en un iPhone 4S no golpeado con el mismo iOS 5.1.1

Puede deberse a una networking defectuosa del hardware del teléfono en sí o puede ser sobre la necesidad de acelerar el ancho de banda (o solo un error en NSURLConnection):

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

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

POSIX error 12 ("No se puede asignar memory") al cargar files desde un iPhone

Me habría movido a ASIHTTPRequest pero ya no se mantiene, por lo que ahora vale la pena implementarlo. Tal vez debería intentar AFNetworking, pero estoy empezando a pensar que este es un problema que ya se ha solucionado en el iOS (o puede ser un iPhone de mala calidad en mi caso).

Pero no puedo por la vida de mí encontrar una explicación simple para esto.