将数据转换为字符串获取nil值

时间:2016-10-10 09:29:37

标签: ios objective-c

我正在开发一个项目,我必须将图像存储到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.");
    }

帮帮我谢谢

2 个答案:

答案 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