3

AfNetworking 経由で多数の画像ファイルを Rails サーバーに送信しています。エッジおよび場合によっては 3G で、次のエラーが表示されます: エラー Domain=NSPOSIXErrorDomain Code=12 "操作を完了できませんでした。メモリを割り当てることができません"。

これは、ファイルを送信するために使用しているコードです: https://gist.github.com/cc5482059ae3023bdf50

これを修正する方法はありますか?

オンラインでは、回避策としてファイルをストリーミングすることを提案する人もいます。AFNetworking を使用して複数のファイルをストリーミングする方法に関するチュートリアルを見つけることができませんでした。これどうやってするの?

4

2 に答える 2

1

画像の大きさは?そして、あなたはいくつ送ろうとしていますか?

NSInputStreamusingを実装する簡単な方法を見つけることができないようですがAFNetworking、自動解放プールに大きなオブジェクトを入れないようにすることを試してみてください。for ループ内に大きな NSData インスタンスを作成し、それらが自動解放プールに移動する場合、ループが続く限り、すべてのメモリが保持されます。これは、最適化する 1 つの方法です。

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

または、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"];
    }
}
于 2012-06-01T19:29:49.623 に答える
0

この質問が出されてからしばらく経ちましたが、私はこの問題について2セントを払わなければなりません。

週の大部分を費やしてこのことを理解しようとした後、私は今ここにいます:

  • この問題は、iOS5.1.1を実行している少し強打された古いiPhone4で発生します
  • 同じiOS5.1.1を実行している強打されていないiPhone4Sでそれを再現することはできないようです

電話ハードウェア自体によるネットワークの障害が原因である可能性があります。または、帯域幅を調整する必要がある可能性があります(またはNSURLConnectionのバグのみ)。

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

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

iPhoneからファイルをアップロードしているときにPOSIXエラー12(「メモリを割り当てることができません」)

ASIHTTPRequestに移動したはずですが、保守されなくなったため、実装する価値があります。たぶん私はまだAFNetworkingを試してみる必要がありますが、これはiOSですでに修正されている問題であると本当に考え始めています(または私の場合は見苦しいiPhoneかもしれません)。

しかし、私は一生の間、これについての簡単な説明を見つけることができません。

于 2013-01-18T14:40:26.183 に答える