2016-07-05 1 views
1

サーバからの文字列の言語はHerbewです。そのデータを私のビューに直接表示すると文字が正しく表示されますが、次回はデータベースから取り出しようとすると "????"右の文字!私はDB //英語以外の言語/特殊文字をコアデータに保存するにはどうすればよいですか?

-(BOOL)addContact:(ALContact *)userContact { 

     ALDBHandler * dbHandler = [ALDBHandler sharedInstance]; 

     DB_CONTACT* existingContact = [self getContactByKey:@"userId" value:[userContact userId]]; 
     if (existingContact) { 
      return NO; 
     } 

     BOOL result = NO; 

     DB_CONTACT * contact = [NSEntityDescription insertNewObjectForEntityForName:@"DB_CONTACT" inManagedObjectContext:dbHandler.managedObjectContext]; 
     contact.displayName = userContact.displayName; 

     NSError *error = nil; 
     result = [dbHandler.managedObjectContext save:&error]; 

     if (!result) { 
      NSLog(@"addContact DB ERROR :%@",error); 
     } 

     return result; 
} 
+0

Core Dataは英語以外の文字を文字列として保存する特別な手順を必要としないため、コードの動作を記述する必要があります。 –

+0

@TomHarringtonサーバは今件までこの "\ U05de \ U05ea \ U05df \ U05d0 \ U05e6 \ U05f3 \ U05d0 \ U05d8" とラベルにそれが正しく表示され、このמתןאצ'אטその権利を送りますが、我々はに保存するときiosデータベースから取得して、 "????" フェッチするときにdb /デコードに保存する前にエンコードしようとしました... no luck – djay

+0

コードを投稿しないと答えられません。あなたは間違ったことをしていますが、コードがなければ誰も本当にあなたに何を伝えることができません。 –

答えて

1

ではなく文字列のNSDataとして保存として保存するための表示名を指定して連絡先を保存WHERE

//これがあります。コードの下

を保存し、それをバック取得であなたを助けるかもしれません。

var herbrewStrFromServer = "⌘" //Herbew String 
let dataSaveCoreData = NSKeyedArchiver.archivedDataWithRootObject(herbrewStrFromServer) //Converting into Nsdata so as to save in coredata 
let actualStringRetreived = NSKeyedUnarchiver.unarchiveObjectWithData(dataSaveCoreData) as! String // retrieving it back from core data 
+0

コアデータを操作する。データを保存するときにエンコードするmanagedContext属性があることを天気に示唆できますか? – djay

+0

属性を定義するとき、文字列ではなくバイナリデータとして作成します。また、特定の文字列をデータに変換し、通常の属性と同様にコアデータに保存します。 –

+0

はい、私は実際にxcmod​​el displayName属性の型をバイナリに設定し、それに対応するクラス属性をNSDataに設定してみました.dbオブジェクトを作成する際には、コードとUTF8エンコーディングを使用するようにnsstringを変換しました。両方ともこの場合は動作しません。 – djay

2

それは(私たちは丸い行くと、長い時間のためのコメントで議論を経由してのラウンドでした)物事がうまく行っている場所を正確に伝えるのは難しいですが、答えは次のようになります:

  1. コアデータ英語以外のテキストを保存するための特別な手順は必要ありません。それだけで動作します。しかし...
  2. 文字列のエンコーディングはを台無しにするのは非常に容易であり、エラーの非常に一般的な原因です。あなたのコードのどこかに(多分複数の場所で)エンコーディングが間違っています。これは偽の文字列を引き起こします。 Core Dataでこのひどくエンコードされた文字列を使用しているため、Core Dataの問題のようにしか見えません。私はコアデータを使用して「マスター・ディテールアプリケーション」テンプレートを使用して新しいXcodeプロジェクトを、作成した実験として

。次に、 "name"というデフォルトの "Event"エンティティにフィールドを追加し、この文字列を表示するようにUIを変更しました。

は、それから私は、「名前」の値として、あなたの文字列を割り当て:

newEvent.name = @"מתןאצ׳אט";

アプリを終了し、リニューアル、いくつかのインスタンスを作成した後、私は文字列が正しく保存されたことを確認することができ、そのまま取り出さ、そして正しくUIで表示:

iOS Simulator screenshot

だから、あなたのコアデータのコードを見て停止し、あなたがこの文字列を処理する方法のあらゆるステップを見て開始します。

+0

あなたはあります!私はあなたが今いると確信しています!私は、サーバーからの2つのユーザーディテールのフェッチコールが最初に正しくエンコードされていると思われますが、2つのタスク(データの取得と反映)の間にいくつかのタスク(CoreDataからの取得)を実行するとすぐに、 DBに偽のものを保存するエンコード!あなたの答えをありがとう! – djay

関連する問題