私が作成しているアプリは、4つの方法(4つ目はテスト関数)で画像をアップロードします。
1.次のようにUIImagePickerControllerSourceTypeCameraを使用してUIImagePickerControllerから直接:
//didFinishPickingImage method
if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera)
{
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
}
CGRect myImageRect = CGRectMake(30.0f, 190.0f, 250.0f, 210.0f);
myImage = [[UIImageView alloc] initWithFrame:myImageRect];
//released in dealloc because I reuse it alot
myImage.image = img;
[self.view addSubview:myImage];
2.写真ライブラリから直接ピッキングも使用
myImage.image = img;
3.1から保存した画像を使用します。
pathFile = @"/private/var/mobile/Media/DCIM/100APPLE/";
NSString *ImagePath = [pathFile stringByAppendingString:imageFileName];
NSData *imageDataFile = [NSData dataWithContentsOfFile:ImagePath];
UIImage *img = [UIImage imageWithContentsOfFile:ImagePath];
myImage.image = img;
4.テスト関数として:iPhoneのデフォルトのカメラアプリ(UIImagePickerControllerと同じ)で撮影した画像を使用しますが、UIImagepickerController、UIImagePickerControllerSourceTypePhotoLibraryの代わりにImagePathを使用します。
//Same as Number 3.
pathFile = @"/private/var/mobile/Media/DCIM/100APPLE/";
NSString *ImagePath = [pathFile stringByAppendingString:imageFileName];
NSData *imageDataFile = [NSData dataWithContentsOfFile:ImagePath];
UIImage *img = [UIImage imageWithContentsOfFile:ImagePath];
myImage.image = img;
*ここまで、ユーザーはUIImageViewのmyImageインスタンスに追加された画面で4つの方法のいずれかでファイルを見ることができます(ユーザーの選択によって異なります)。これは、私が適切なファイル(3つと4つ)を選択していることを証明しています。
//uploading function
NSData *imageData = UIImageJPEGRepresentation(myImage.image, 1.0);
NSMutableURLRequest *request2 = [[[NSMutableURLRequest alloc] init] autorelease];
[request2 setURL:[NSURL URLWithString:urlString]];
[request2 setHTTPMethod:@"POST"];
NSMutableData *body = [NSMutableData data];
//... append boundary, content-disposition code etc here.
[body appendData:[NSData dataWithData:imageData]];
[request setHTTPBody:body];
問題は、アップロード時に、番号1、2、および4が機能し、番号3が機能しないことです。
コンソール出力; プログラム受信信号:「EXC_BAD_ACCESS」
この出力は、解放されたオブジェクトからのアクセスの試行に起因することを認識しており、他の状況でこの問題に遭遇して解決しました。しかし、私のメモリ割り当てをカウンターチェックした後でも、ここではまだ方法が見つかりませんでした。
この問題を解決する方法を本当にいただければ幸いです。