私のアプリケーションでは、HTTP ポスト メソッドを使用して写真をアップロードし、サーバーから応答を取得して、ステータスをユーザーに表示しました。私のコードは ios5 では正常に動作しますが、ios6 で実行するとデリゲート メソッド " - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
" が起動されません。アプリケーションで頻繁に発生します。アプリケーションを実行すると、最初にアップロード ボタンを起動すると正しく動作し、アップロード ボタンを起動するとデリゲート メソッドが呼び出されません。最後に、コンソール ログを貼り付けました。参照用にコードをここに貼り付けました。これについて私を助けてください。前もって感謝します...
ここで" didReceiveData
"デリゲート メソッドが必要な理由は、アップロードしたファイルに基づいてサーバーの応答を解析する必要があるためです。サーバーの応答は、" didReceiveData
"メソッドの権利でのみ検索されます。
-(IBAction)upload:(id)sender
{
UIImage *test = [UIImage imageNamed:@"bottle.jpg"];
NSData *dataObj = UIImageJPEGRepresentation(test, 1.0);
NSString *postLength = [NSString stringWithFormat:@"%d", [dataObj length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
NSString *requestUrl =[API_URL stringByAppendingString:@"/abcDemo_uploadPhoto"];
[request setURL:[NSURL URLWithString:requestUrl]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"image/jpg" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"123" forHTTPHeaderField:@"UserId"];
[request setHTTPBody:dataObj];
NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];
if (conn)
{
receiveData = [[NSMutableData data] retain];
}
}
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten
totalBytesWritten:(NSInteger)totalBytesWritten
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite{
float progress = [[NSNumber numberWithInteger:totalBytesWritten] floatValue];
float total = [[NSNumber numberWithInteger: totalBytesExpectedToWrite] floatValue];
NSLog(@"progress/total %f",progress/total);
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"didReceiveResponse");
[receiveData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"didReceiveData");
[receiveData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"connectionDidFinishLoading");
}
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError");
}
私のコンソールログ:
1回目:
2013-01-10 06:24:41.446 SampleProject[1004:11c03] progress/total 1.000000
2013-01-10 06:24:41.893 SampleProject[1004:11c03] didReceiveResponse
2013-01-10 06:24:41.894 SampleProject[1004:11c03] didReceiveData
2013-01-10 06:24:41.894 SampleProject[1004:11c03] connectionDidFinishLoading
2回目:
2013-01-10 06:24:49.535 SampleProject[1004:11c03] progress/total 1.000000
2013-01-10 06:24:49.605 SampleProject[1004:11c03] didReceiveResponse
2013-01-10 06:24:49.606 SampleProject[1004:11c03] connectionDidFinishLoading
3回目:
2013-01-10 06:24:41.446 SampleProject[1004:11c03] progress/total 1.000000
2013-01-10 06:24:41.893 SampleProject[1004:11c03] didReceiveResponse
2013-01-10 06:24:41.894 SampleProject[1004:11c03] didReceiveData
2013-01-10 06:24:41.894 SampleProject[1004:11c03] connectionDidFinishLoading
4 回目:
2013-01-10 06:24:49.535 SampleProject[1004:11c03] progress/total 1.000000
2013-01-10 06:24:49.605 SampleProject[1004:11c03] didReceiveResponse
2013-01-10 06:24:49.606 SampleProject[1004:11c03] connectionDidFinishLoading