2016-10-10 1 views
0

Я работаю над проектом, в котором я должен хранить изображение в базе данных sqlite. но когда я пытаюсь преобразовать NSData в NSString, он возвращает значение 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 библиотеку по этой ссылке: https://github.com/bborbe/base64-ios/tree/master/Base64

+3

Кодирование Base64 поддерживается непосредственно «NSData», нет необходимости загружать стороннюю библиотеку. – CRD

3

Вы не можете просто предположить, что двоичные данные, представляющие PNG изображения также действительны UTF- 8 кодировка строки, что и делает ваш код в первых двух строках.

Вы получаете значение null, потому что двоичные данные не могут быть интерпретированы как строка UTF-8.

Что вам нужно сделать, это использовать строковое кодирование двоичных данных, base64 является общим и также поддерживается напрямую NSData. Выполните поиск метода base64EncodedStringWithOptions: для генерации строки и initWithBase64EncodedString:options: для преобразования закодированной строки обратно в данные.

НТН

+0

Что не так с сохранением двоичных данных в базе данных; зачем нужно кодировать base-64? – Droppy

+0

@ Droppy - ничего плохого, если база данных поддерживает его. Ответ просто решает проблему, с которой OP конвертирует двоичные данные в строку. – CRD

+0

Согласен; однако поощрение использования базы-64 там, где это не требуется, очень неэффективно, и проблема OP заключается в том, что он неправильно использует API sqlite. – Droppy

Смежные вопросы