2016-10-10 3 views
0

저는 sqlite 데이터베이스에 이미지를 저장해야하는 프로젝트에서 작업하고 있습니다. NSString NSData 변환 할 때 그것은 nil 값을 반환합니다.데이터를 문자열로 변환하면 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

그냥 데이터를 확인는 내가 쿼리를 통해 데이터를 삽입하고 전에 가져 오지의 데이터베이스 .. – vaibhav

+0

에 삽입됩니다. 데이터가 없으면 어떻게 가져올 수 있습니까? –

+0

아마 당신의 데이터가 db 안에 존재하지 않을 것입니다. 단지 이미지 데이터를 포함하고있는 당신의 문자열로 그것을 다시 체크하거나 뭔가 잘못되었습니다. – vaibhav

답변

0
imageData = [[NSData alloc]initWithBytes:UIImagePNGRepresentation(self.img_userprofile.image).bytes length:UIImagePNGRepresentation(self.img_userprofile.image).length]; 
NSString *strEncodeImg = [Base64 encode:imageData]; 

우리는이 링크에서 다운로드 Base64로 라이브러리가 : 당신은 그냥 PNG 이미지를 나타내는 이진 데이터는 유효한 UTF-이라고 가정 할 수 https://github.com/bborbe/base64-ios/tree/master/Base64

+3

Base64 인코딩은 NSData에서 직접 지원되므로 제 3 자 라이브러리를 다운로드 할 필요가 없습니다. – CRD

3

을 8 코드는 처음 2 줄에서 코드가 수행하는 문자열 인코딩입니다.

이진 데이터를 UTF-8 문자열로 해석 할 수 없기 때문에 null이 표시됩니다.

당신이해야 할 일은 이진 데이터의 문자열 인코딩을 사용하는 것입니다. base64는 일반적이며 NSData으로 직접 지원됩니다. 문자열을 생성하려면 base64EncodedStringWithOptions: 메서드를 조회하고 인코딩 된 문자열을 데이터로 다시 변환하려면 initWithBase64EncodedString:options:을 찾습니다.

HTH

+0

데이터베이스에 이진 데이터를 저장하는 것이 잘못된 이유는 무엇입니까? 왜 Base-64로 인코딩해야합니까? – Droppy

+0

@Droppy - 데이터베이스가 지원하는 경우에는 아무런 문제가 없습니다. 이 답변은 OP가 바이너리 데이터를 문자열로 변환하는 문제를 해결합니다. – CRD

+0

동의; 그러나 필수가 아닌 base-64의 사용을 장려하는 것은 매우 비효율적이며 OP의 문제는 그가 sqlite API를 오용하고 있다는 것입니다. – Droppy

관련 문제