1

我在将图像路径保存到 Documents 文件夹并将路径存储到我的 sqlite3 本地数据库中时遇到了一些麻烦。

今天我成功地将图像以BLOB的形式存储到了数据库中,但是在互联网上阅读,人们说不推荐这样做。

所以,现在我正在尝试将图像路径存储在数据库中但是..

情况

  1. 用户点击按钮选择图像(通过 UIImagePickerView)或拍摄新照片
  2. 选择图像后,会使用所选图像设置 imageView。

选择器代码:

-(void)imagePickerController:(UIImagePickerController *)pickr didFinishPickingMediaWithInfo:(NSDictionary *)info{
    UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
    /* Test code for saving data */   
    //NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //NSString *pngPath = [NSString stringWithFormat:@"%@/test.png",dir];
    //NSData *data = [NSData dataWithData:UIImagePNGRepresentation(image)];
    //[data writeToFile:pngPath atomically:YES];

    [imageView setImage:image];
    picture = YES;
    [pickr dismissModalViewControllerAnimated:YES];
}

现在我有几个问题

  1. 进入我的数据库,图像是 BLOB 类型。我应该将其编辑为 TEXT 吗?
  2. 路径如何保存?我的意思是,在测试代码中 /test.png 是一个通用图像名称。选择的图像名称是否也被保存以便我可以检索它?或者,更好的是,如果我保存从我的库中选择的名为“IMG0001”的图像,它会保存为“测试”吗?
  3. 将图像保存到文档文件夹中的正确方法是什么,它的数据库路径然后检索它?

我用谷歌搜索了很多以找到答案,但在尝试了很多之后我放弃了。

提前致谢

4

2 回答 2

1

是关于如何在 Documents 目录中保存图像的好教程

您需要将 BLOB 字段转换为 TEXT 字段并保存该图像的文件名。您也可以在 Documents 目录中创建文件夹,然后通过文件夹名/文件名.png 访问。

希望这些信息对你有帮助。。

编辑

这是检查该文件夹是否存在的代码,如果不存在则创建新的该文件夹

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"MyFolder"];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]){

    NSError* error;
    if(  [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error])
        ;// success
        else
        {
            NSLog(@"[%@] ERROR: attempting to write create MyFolder directory", [self class]);
            NSAssert( FALSE, @"Failed to create directory maybe out of disk space?");
        }
}
于 2013-01-10T13:46:51.067 回答
0

您不能直接访问用户照片库中的图像,因为您只能访问 Applications Sandbox 文件夹。

因此,如果您不想将图像作为 blob 文件存储在数据库中,则应将图像保存在应用程序文档文件夹内的缓存文件夹中,然后将您设置为图像的文件名存储在数据库中。

由于所有图像都将位于同一个路径文件夹中,因此您实际上不需要将整个路径保存在数据库中,但只需文件名就足够了。

于 2013-01-10T13:43:56.850 回答