AFNetworking Error Domain= NSPOSIXErrorDomain Code= 12 "Der Vorgang konnte nicht abgeschlossen werden. Speicher kann nicht zugeordnet werden
-
28-10-2019 - |
Frage
Ich sende viele Bilddateien über AfNetworking an einen Rails-Server.Bei Edge und manchmal 3G wird folgende Fehlermeldung angezeigt: Error Domain= NSPOSIXErrorDomain Code= 12 "Der Vorgang konnte nicht abgeschlossen werden. Speicher kann nicht zugeordnet werden."
Dies ist der Code, mit dem ich die Dateien sende: https://gist.github.com/cc5482059ae3023bdf50
Gibt es eine Möglichkeit, dies zu beheben?
Online schlagen einige Leute vor, dass eine Problemumgehung darin besteht, die Dateien zu streamen.Ich konnte kein Tutorial zum Streamen mehrerer Dateien mit AFNetworking finden.Wie kann ich das machen?
Lösung
Wie groß sind die Bilder?Und wie viele versuchen Sie zu senden?
Ich kann anscheinend keinen einfachen Weg finden, einen NSInputStream
mithilfe von AFNetworking
zu implementieren, aber es gibt definitiv eine Sache, die Sie versuchen sollten, nämlich zu vermeiden, dass große Objekte in den Autorelease-Pool gestellt werden.Wenn Sie große NSData-Instanzen in einer for-Schleife erstellen und diese in den Autorelease-Pool gehen, bleibt der gesamte Speicher so lange erhalten, wie die Schleife dauert.Dies ist eine Möglichkeit, es zu optimieren:
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];
}
Oder wenn Sie LLVM3 verwenden:
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"];
}
}
Andere Tipps
Ich weiß, dass diese Frage schon eine Weile her ist, aber ich muss nur meine zwei Cent dafür geben.
Nachdem ich den größten Teil der Woche damit verbracht habe, dieses Zeug herauszufinden, bin ich gerade hier:
- Dieses Problem tritt bei mir auf einem leicht kaputten alten iPhone 4 mit iOS 5.1.1 auf
- Kann nicht auf einem nicht kaputten iPhone 4S mit demselben iOS 5.1.1 reproduziert werden
Möglicherweise liegt dies an einer fehlerhaften Vernetzung der Telefonhardware selbst oder an der Notwendigkeit, die Bandbreite zu drosseln (oder nur an einem Fehler in NSURLConnection):
http://aws.amazon.com/articles/0006282245644577
https://forums.dropbox.com/topic.php?id=25351
Ich wäre zu ASIHTTPRequest gewechselt, aber es wird nicht mehr gepflegt, daher lohnt es sich jetzt, es zu implementieren. Vielleicht sollte ich AFNetworking trotzdem ausprobieren, aber ich fange wirklich an zu denken, dass dies ein Problem ist, das bereits in iOS behoben wurde (oder in meinem Fall ein schlechtes iPhone sein könnte).
Aber ich kann für mein ganzes Leben keine einfache Erklärung dafür finden.