サーバーに定期的にデータを送信し、応答コードを受信するメソッドがあります。そのために NSURLConnection の sendAsynchronousRequest を実装しましたが、小さなデータでも問題なく動作していました。アプリの一般的なタスクであるbase64でエンコードされた画像の送信をテストする機会があり、エンコードされた画像の数文字の後に途切れることがわかりました。関連するコードは次のとおりです。
// Initial setup
NSString *urlStr = @"https://example.com/";
urlRequest = [[NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]] retain];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
// The actual sending part
- (void)sendRequest:(NSString *)reqStr {
@try {
if (sendRequestStatus == kRequestState_waiting) {
sendRequestStatus = kRequestState_processing;
NSString *dataStr = [NSString stringWithFormat:@"request_data=%@",reqStr];
NSLog(@"datastr is %@",dataStr);
NSData *dataForUrl = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"nsdata length is: %i",[dataForUrl length]);
[urlRequest setHTTPBody:dataForUrl];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *res, NSData *data, NSError *err) {
// housekeeping
}];
}
}
ログにエラーはありません。dataStr を出力するログ ステートメントは、正しいデータを出力します。データの長さを出力するログ ステートメントは 183384 バイトを出力します。これは画像に適しているようです。ただし、サーバー上では、エンコードされた画像データの開始後、投稿本文が数文字切り取られます。たとえば/9j/4
、サーバーが最後に受信した文字は 4 です。
これを iPhone 3Gs でテストしています。これは phonegap アプリケーションであり、私の Android バージョンで同じことをテストしても問題がないため、問題はデータ送信の実装にあるはずです。iPhone 4または4sを使用している別のテスターから問題を聞いていないので、処理速度の問題である可能性があります. これを締めて、ポスト本体が切断されないようにするにはどうすればよいですか?