IOS sdkを使用してファイルをアップロードしています。Wifiでは正常に動作しますが、3Gを超えると、大きなファイルで次のエラーが発生することがあります。
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)anError .....
「NSURLErrorDomain-1021リクエストの本文ストリームが使い果たされました」。
私はメソッドを実装することでこの問題を無効にできることを知っています:
- (NSInputStream*)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *) request
だから私はそれをしました。しかし、このメソッドが呼び出されると、didFailWithErrorの次のエラー「操作を完了できませんでした。メモリを割り当てることができません」が発生しました。
メソッドneedNewBodyStreamに遅延を追加すると、このエラーは消えます。誰かがこの遅延が必要なものについて私に説明できますか、そしてどうすればこのハックを取り除くことができますか?
これが私のコードです:
- (void) startUpload
{
NSInputStream* fileStream = [[NSInputStream alloc] initWithFileAtPath: sourcePath];
[self.request setHTTPMethod:@"PUT"];
[self.request setValue:[NSString stringWithFormat: @"%lu", fileSize] forHTTPHeaderField: @"Content-Length"];
[self.request setHTTPBodyStream: fileStream];
NSURLConnection* newConnection = [[NSURLConnection alloc] initWithRequest: self.request delegate: self startImmediately: YES];
self.connection = newConnection;
[newConnection release];
[fileStream release];
}
#pragma mark NSURLConnectionDelegate
- (NSInputStream *) connection: (NSURLConnection *) aConnection needNewBodyStream: (NSURLRequest *) request
{
[NSThread sleepForTimeInterval: 2];
NSInputStream* fileStream = [NSInputStream inputStreamWithFileAtPath: sourcePath];
if (fileStream == nil)
{
NSLog(@"NSURLConnection was asked to retransmit a new body stream for a request. Returning nil will cancel the connection.");
}
return fileStream;
}