我正在开发一个项目,我必须将图像存储到sqlite数据库中。但是当我尝试将NSData转换为NSString时,它返回nil值。
这是我的代码。
imageData = [[NSData alloc]initWithBytes:UIImagePNGRepresentation(self.img_userprofile.image).bytes length:UIImagePNGRepresentation(self.img_userprofile.image).length];
NSString *charlieSendString = [[NSString alloc] initWithData:imageData encoding:NSUTF8StringEncoding];
NSString *query = [NSString stringWithFormat:@"insert into Friends values(null, '%@', '%@', '%@')", self.txt_name.text,charlieSendString, self.txt_mobile_no.text ];
[self.dbManager executeQuery:query];
// If the query was successfully executed then pop the view controller.
if (self.dbManager.affectedRows != 0) {
NSLog(@"Query was executed successfully. Affected rows = %d", self.dbManager.affectedRows);
}
else{
NSLog(@"Could not execute the query.");
}
帮帮我谢谢
答案 0 :(得分:3)
您不能只假设表示PNG图像的二进制数据也是字符串的有效UTF-8编码,这是您的代码在前两行中所做的。
您将获得null,因为二进制数据不能解释为UTF-8字符串。
您需要做的是使用二进制数据的字符串编码,base64是常见的,并且也由NSData
直接支持。查找base64EncodedStringWithOptions:
方法以生成字符串,并initWithBase64EncodedString:options:
将编码后的字符串转换回数据。
HTH
答案 1 :(得分:0)
imageData = [[NSData alloc]initWithBytes:UIImagePNGRepresentation(self.img_userprofile.image).bytes length:UIImagePNGRepresentation(self.img_userprofile.image).length];
NSString *strEncodeImg = [Base64 encode:imageData];
我们已从此链接下载Base64库:https://github.com/bborbe/base64-ios/tree/master/Base64