2

sqlite データベースに varchar 列があります。テキストの特定の行にはバックスラッシュがあり、これは UITextView のキャリッジ リターンの "\n" と共に使用されます。SELECT を介してデータベースから値が読み取られる場合:

myobject.text = [NSString stringWithUTF8String: (char *)sqlite3_column_text(selectstmt, 2)];

バックスラッシュはエスケープされ、次のようになります。

"\\n" rather than "\n"

これはキャリッジ リターンとして解釈されません。テキストに 2 つのブラックスラッシュを追加すると、2 番目もエスケープされ、最終的にテキストビューがサブビューとして追加されたときに例外が発生します。

キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。理由: '[ setValue:forUndefinedKey:]: このクラスは、キー テストのキー値コーディングに準拠していません。

これらのエスケープを防ぐ方法はありますか、それとも手動でクリーンアップする必要がありますか?

4

1 に答える 1

3

バックスラッシュは間違いなくコラムのテキストにあります -- バックスラッシュがそのように表示されているため (エスケープ シーケンスとの混同を避けるため)、2 重に「表示」されています。sqlite は、クエリを実行したときにそこに入力したテキストを変更していませんが、おそらく、データベースにあるテキストは、受信したいものではありません。

あなたがする必要があるのは、2文字のバックスラッシュ-nを1文字に変更することnewlineです.データベース(一度だけ、または各クエリで)または目的のCコード(各クエリで)のいずれかでそれを行うことができます) 正確なニーズに応じて。

于 2009-05-31T16:53:02.437 に答える