2

データベースに画像を保存します。画像を取得して CSV ファイルにエクスポートしようとしています。次のコードを使用して文字列に変換しますが、null を返します。

   int length = sqlite3_column_bytes(compiledStatement, i); 
   NSData *img =[NSData dataWithBytes:sqlite3_column_blob(compiledStatement, i) length:length];
   text = [[NSString alloc] initWithData:img encoding:NSUTF8StringEncoding];

   NSLog(@"ColName : %@, TEXT : %@",colName, text); //Text displayed is (NULL)

画像を保存するときに、画像を NSData に変換してからデータベース列に挿入します。画像が保存される列のデータ型は「blob」です。

前もって感謝します。

4

2 に答える 2

2

エンコーディング引数は、文字列が何であるかではなく、データinitWithData:encoding:エンコーディングが何であるかを指定します。データが実際にはUTF-8でない場合、変換は失敗し、返される文字列はnullになります。

データがバイナリであるため、変換で無効なUTF-8バイトシーケンスが発生して中止されることがほぼ100%保証されます。

画像データを文字列にシリアル化することはお勧めしませんが、どうしても実行する必要がある場合は、このSOの投稿で説明されているように、最初にデータをBase-64でエンコードする必要があります。

于 2012-12-20T08:12:02.030 に答える
1

たぶん、データから画像を撮るために使用してみてください

[NSKeyedUnarchiver unarchiveObjectWithData:yourData]

そしてあなたのデータに保存する

 NSData *newData = [NSKeyedArchiver archivedDataWithRootObject:yourObject];

画像やその他のコンテンツをコアデータに保存するために使用します。

于 2012-12-20T08:11:35.417 に答える