Ios UIImage与NSData之间的转换

Ios UIImage与NSData之间的转换,ios,objective-c,uiimage,nsdata,Ios,Objective C,Uiimage,Nsdata,我通过存储图像的字符串表示将图像存储在数据库中,如下所示: NSData *imageData = UIImageJPEGRepresentation(myImage, 0.7); NSString *imageString = [[NSString alloc] initWithData: imageData encoding:NSUTF8StringEncoding]; 然后将该字符串存储在数据库中。稍后在我的代码中,我需要将其从数据库中拉出并显示出来。我尝试这样检索它: NSData *

我通过存储图像的字符串表示将图像存储在数据库中,如下所示:

NSData *imageData = UIImageJPEGRepresentation(myImage, 0.7);
NSString *imageString = [[NSString alloc] initWithData: imageData encoding:NSUTF8StringEncoding];
然后将该字符串存储在数据库中。稍后在我的代码中,我需要将其从数据库中拉出并显示出来。我尝试这样检索它:

NSData *data = [[items[i] objectForKey:@"image"] dataUsingEncoding:NSUTF8StringEncoding];
UIImage *newImage = [[UIImage alloc] initWithData:data];

其中
items
是从数据库检索的数据数组。但是,当我检索它时,
newImage
为零。我的编码方法是我在这个网站上最常看到的,但现在我想这一定是问题所在。有人能帮我吗?

考虑使用base 64编码字符串作为数据的表示形式。例如,从iOS 7.0开始,您可以通过调用以下命令从图像数据中获取字符串:

// Convert to string
NSString *base64String = [imageData base64EncodedStringWithOptions:0];
// Convert string to image
NSData *dataFromString = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
UIImage *image = [UIImage imageWithData:dataFromString];

为什么要将您的
imageData
转换为
NSString
?您需要将图像存储为blob格式。不要这样做:
[[items[i]objectForKey:@“image”]…
。将其分解为单独的语句,以便您可以查看每个阶段的内容。(如前两条注释所示,一旦将数据转换为NSString,它就乱七八糟,无法恢复。如果存储在SQL DB中,则应将其存储为“blob”。)我使用的是Azure移动服务,它不允许您存储blob-仅允许数字、字符串、日期或布尔值。我正在尝试使用可用的内容找到解决方法。如果生成的
newImage
nil
,将其更改为base-64编码将如何帮助您?如果此数据存储在SQL数据库中,则应将其存储为blob。存储为Base64字符串是不必要的工作。使用此操作仍会导致nil映像。如上面的注释所述,数据库不允许我存储blob。在测试它时,是否确保对现有数据进行重新编码?例如,调用initWithBase64EncodedString:并且使用以前编码为UTF-8的字符串不会initWithBase64EncodedString之后,您能验证数据不是nil吗?