我正在开发一个iPad应用程序,我让用户创建一个对象。我也允许他/她为这个对象添加10张图片。他们可以从相机胶卷中选择这些照片或者拍摄一张新照片(如果iPad有相机)。
我现在的问题是存储这些照片的最佳方式是什么?在我看来,最好的方法是使用UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:finishedSavingWithError:contextInfo:), nil);
方法。这样我就可以随时存储(或使用)iPad相册中的图像。但在这种情况下,我需要能够在数据库中存储某些东西,以便以后能够再次检索图像。那么...... 如何在finishedSavingWithError:contextInfo:
方法中获取文件路径的URL ,以存储在数据库中?
实现目标的另一种方法是将它们保存到私人文件夹中:
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = image;
[ImageManager saveImage:image atIndex:0];
}
}
我的saveImage
方法执行以下操作:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", index]];
[fileManager createFileAtPath:fullPath contents:imageData attributes:nil];
或者我应该将图像作为BLOB存储在sqlite数据库中吗?
就我个人而言,我认为最后两种可能性会受到打击,因为基本上你将两次存储都存在。如果您从图库中选择图像,它将在本地(您的图库) PLUS 存储在数据库或应用程序子目录中。这是浪费空间。
这样做的最佳方法是什么,表现明智?
而且,如果我将它们存储在一个目录中,用户是否可以访问该目录并将其删除?
感谢分享你的智慧!
答案 0 :(得分:0)
我认为您无法获得使用UIImageWriteToSavedPhotosAlbum
即使这是可能的,我建议您仍然将图像存储在应用中。通过将它们导出到“照片”应用,您可以有效地取消应用中的图像以及为其创建的对象的关联。
例如,如果有人从照片应用中删除了图片而没有意识到/记住图片与您的应用相关联,会发生什么?你无法阻止这种情况。
关于保存方法(BLOB或文件)是可以接受的。我建议您在保存前调整图像大小,除非需要全尺寸原始图像。这样做有很多资源(例如UIImage: Resize, then Crop)