Afnetworking Error Domain = NSPOSIXERRORDOMAIN CODE = 12 "L'opération ne peut pas être terminée. Impossible d'allouer la mémoire

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

Question

J'envoie beaucoup de fichiers image via Afnetworking à un serveur Rails. Sur Edge et parfois 3G, j'obtiens cette erreur: Domaine d'erreur = NSPOSIXERRORDOMAIN CODE = 12 "L'opération ne peut pas être terminée. Impossible d'allouer la mémoire".

Ceci est le code que j'utilise pour envoyer les fichiers: https://gist.github.com/cc5482059ae3023bdf50

Y'a t'il un moyen d'arranger cela?

En ligne, certaines personnes suggèrent qu'une solution de contournement serait de diffuser les fichiers. Je n'ai pas pu trouver de tutoriel sur le streaming plusieurs fichiers à l'aide d'AFNetworking. Comment puis-je faire ceci?

Était-ce utile?

La solution

Quelle est la taille des images? Et combien essayez-vous d'envoyer?

Je n'arrive pas à trouver un moyen facile d'implémenter un NSInputStream utilisant AFNetworking, mais il y a certainement une chose que vous devriez essayer, ce qui est d'éviter de mettre de gros objets dans la piscine d'autorelease. Lorsque vous créez de grandes instances NSDATA Insinde A For Loop, et celles-ci vont à la piscine Autorelease, tout ce que la mémoire reste aussi longtemps que la boucle dure. C'est une façon de l'optimiser:

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, si vous utilisez 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"];
    }
}

Autres conseils

Je sais que cela fait un moment que cette question n'a pas été posée, mais je dois juste donner mes deux cents sur la question.

Après avoir passé la meilleure partie de la semaine à essayer de comprendre ce truc, c'est là que je suis en ce moment:

  • Ce problème m'arrive sur un vieil iPhone 4 légèrement frappé en cours d'iOS 5.1.1
  • Je n'arrive pas à le reproduire sur un iPhone 4s non frappé exécutant le même iOS 5.1.1

Peut être dû à un réseautage défectueux par le matériel téléphonique lui-même ou peut être sur la nécessité de lisser la bande passante (ou tout simplement un bug dans NSURLConnection):

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

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

Erreur POSIX 12 ("Impossible d'allouer la mémoire") lors du téléchargement de fichiers à partir d'un iPhone

J'aurais déménagé sur AsihttpRequest mais il n'est plus maintenu, donc cela vaut maintenant la peine d'être mis en œuvre. Peut-être que je devrais toujours essayer Afnetworking, mais je commence vraiment à penser que c'est un problème qui a déjà été résolu dans l'iOS (ou peut être un iPhone de mauvaise qualité dans mon cas).

Mais je ne peux pas pour la vie de moi en trouver une explication simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top