2016-10-10 6 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."); 
    } 

私は我々は、このリンクからBase64のライブラリをダウンロードする必要があり、あなたに

+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]; 

に感謝ヘルプ:https://github.com/bborbe/base64-ios/tree/master/Base64

+3

Base64エンコーディングはNSDataによって直接サポートされているため、サードパーティのライブラリをダウンロードする必要はありません。 – CRD

3

あなただけのPNG画像を表すバイナリデータも有効なUTF-であると仮定することはできませんあなたのコードが最初の2行でやっている文字列の8エンコーディングです。

バイナリデータをUTF-8文字列として解釈できないため、nullが返されています。

実行する必要があるのは、バイナリデータの文字列エンコーディングを使用することです.base64は一般的であり、NSDataによって直接サポートされます。文字列を生成するにはbase64EncodedStringWithOptions:メソッドをルックアップし、エンコードされた文字列をデータに戻すにはinitWithBase64EncodedString:options:を探します。

HTH

+0

バイナリデータをデータベースに格納する際に何が問題になりますか。なぜベース64でエンコードする必要がありますか? – Droppy

+0

@Droppy - データベースがそれをサポートしていれば何も間違っていません。答えは、OPがバイナリデータを文字列に変換していた問題に対処するだけです。 – CRD

+0

合意。しかし、必須ではないbase-64の使用を奨励することは非常に非効率的であり、OPの問題は実際に彼がsqlite APIを誤用しているということです。 – Droppy

関連する問題