0

UIImagePickerController の単純な実装を使用して写真を撮り、アプリ ディレクトリに保存しています。didFinishPickingMediaWithInfo で問題が発生しています。情報から画像を取得し、UIImageJPEGRepresentation を使用してそれを NSData に変換し、ファイルに保存します。問題は、NSData オブジェクトが決して上書きされないように見えることです。写真を撮ると写真は問題なく保存されますが、保存先のファイルパスにある画像を再表示すると、常に最初に撮った写真になるため、後続の写真は保存されません。

私は現在、NSLog ステートメントを使用して、UIImage のハッシュと、画像を保存している NSData オブジェクトのハッシュを出力しています。UIImage ハッシュは毎回変更されますが、NSData ハッシュは常にまったく同じです...それも変更すべきではありませんか?

私のコードは以下です。以下のデリゲート メソッドで宣言されていないものはすべて、問題を引き起こしていないグローバル var であることに注意してください (少なくとも問題はないようです)。

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentsDirectory = [paths objectAtIndex:0];          
    filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileNameString];

    NSData *imageData = UIImageJPEGRepresentation(image, 0.5f);
    //    imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.5f)];

    [imageData writeToFile:filePath atomically:YES];

    [self dismissModalViewControllerAnimated:YES];
}

NSData オブジェクトを完全に取り除き、すべてのインスタンスを置き換えると

imageData

UIImageJPEGRepresentation(image, 0.5f)

つまり、パラメーターとして受け取る UIImage のハッシュは常に変化しますが、 UIImageJPEGRepresentation(image, 0.5f) のハッシュは常に同じです。

4

1 に答える 1

0

これを試して:

 NSData *imageData = UIImageJPEGRepresentation(image, 0.5f);
 imageData = [NSKeyedArchiver archivedDataWithRootObject:imageData];
//imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.5f)];

NSError *error= nil;
[imageData writeToFile:filePath options:NSDataWritingAtomic error:&error];

こちらのリンクもご覧ください

ディレクトリを作成していますか?次のコードを使用して、ディレクトリを作成します。

NSArray* dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                        NSUserDomainMask, YES);
NSString* docsDir = [dirPaths objectAtIndex:0];

pathString = [docsDir stringByAppendingPathComponent:@"%@",filePath];

NSFileManager* filemgr = [NSFileManager defaultManager];

//Creates  Directory
if ([filemgr createDirectoryAtPath:pathString
       withIntermediateDirectories:YES 
                        attributes:nil 
                             error: NULL] == YES){
于 2012-08-28T01:52:41.603 に答える