UIImagePickerController委托方法不重新保存/覆盖拍摄的新照片

时间:2012-08-28 01:38:30

标签: ios save uiimagepickercontroller

我正在使用UIImagePickerController的简单实现来拍照并将其保存到我的app目录。我遇到了didFinishPickingMediaWithInfo的问题,我从信息中检索图像,使用UIImageJPEGRepresentation将其转换为NSData,然后将其保存到文件。问题是,NSData对象似乎永远不会被覆盖,所以我第一次拍照就可以保存好照片,但任何后续照片都不会保存,因为当我重新显示位于filePath的图像时,我将它保存到,它始终是我拍摄的第一张照片。

我现在有NSLog语句打印出UIImage和我保存图像的NSData对象的哈希值。 UIImage散列每次都会更改,但NSData散列始终完全相同...不应该也会改变吗?

我的代码如下。请注意,下面的委托方法中未声明的所有内容都是全局变量,不会给我带来任何麻烦(至少看起来不是这样)。

-(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)

我仍然有同样的问题,即UIImageJPEGRepresentation(图像,0.5f)的哈希总是相同的,即使它作为参数的UIImage的哈希值总是在变化。

1 个答案:

答案 0 :(得分: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];

另请查看此link

您是否正在创建目录?使用此代码创建目录:

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){