2016-07-05 7 views
1

서버에서 오는 문자열의 언어는 Herbew이고 직접 볼 때 해당 데이터가 올바르게 표시되지만 다음 번에 데이터베이스에서 가져 오기를 시도 할 때 "????"대신 오른쪽 문자! 나는 오히려 문자열을 NSData로 저장으로 저장하는 것보다 //핵심 데이터에 영어 이외의 특수 문자를 저장하는 방법은 무엇입니까?

-(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

핵심 데이터는 영어 이외의 문자를 문자열로 저장하는 특별한 단계가 필요 없기 때문에 코드에서 수행중인 작업을 설명해야합니다. –

+0

@TomHarrington 서버가이 "\ U05de \ U05ea \ U05df \ U05d0 \ U05e6 \ U05f3 \ U05d0 \ U05d8"을 보내고 라벨에 올바르게 표시됩니다. מתן א 지금 바로 저장하지만 저장할 수 있습니다. ios 데이터베이스를 가져 와서 가져오고 "????" db/decoding에 저장하기 전에 인코딩을 시도해 보았습니다. no nock – djay

+0

일부 코드를 게시하지 않으면 대답이 없습니다. 당신은 뭔가 잘못하고 있지만 어떤 코드가 없으면 아무도 정말로 당신에게 무엇을 말할 수 있습니다. –

답변

1

을 dB로 표시 이름과 연락처를 저장 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

예, 사실상 xcmodel displayName 특성의 형식을 이진수로 설정하고 해당 클래스 특성을 NSData로 설정하고 db 개체를 만드는 동안 nsstring을 코드와 UTF8 인코딩으로 변환했습니다. 두 경우 모두 작동하지 않습니다. – djay

2

일이 잘못 가고있다 정확히 얘기하기 어렵다 (우리는 라운드 갈 수 있고 오랜 시간 동안 의견 토론을 통해 라운드), 그러나 대답은 될 것 같은 뭔가 :

  1. 코어 데이터 영어가 아닌 텍스트를 저장하는 특별한 단계가 필요하지 않습니다. 그냥 작동합니다. 그러나 ...
  2. 문자열 인코딩은 매우이며 쉽게 오류가 발생할 수 있습니다. 어딘가에 코드 (어쩌면 여러 장소에)에서 잘못된 인코딩을 얻고있어 가짜 문자열이 발생합니다. 핵심 데이터 문제처럼 보입니다. 핵심 데이터와 함께 잘못 인코딩 된 문자열을 사용하고 있기 때문입니다.

실험으로 나는 Core Data를 사용하여 "Master-Detail Application"템플릿을 사용하여 새로운 Xcode 프로젝트를 만들었습니다. 그런 다음 "name"이라는 기본 "이벤트"엔티티에 필드를 추가하고이 문자열을 표시하도록 UI를 수정했습니다.

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

이 몇 인스턴스를 생성 종료하고 응용 프로그램을 다시 실행 한 후, 내가 확인할 수 있습니다 문자열이 제대로 저장 그대로 검색되었다 :

은 그 때 나는 "이름"의 값으로 당신의 문자열을 할당 , 올바르게 UI 표시 :

iOS Simulator screenshot

그래서, 당신의 코어 데이터 코드를 찾고 중지하고이 문자열을 처리하는 방법의 모든 단계에서 찾고 시작합니다.

+0

잡았습니다! 나는 네가 당장 확신한다! 나는 우리가 두 개의 사용자 상세 정보를 서버에서 가져 오는 것으로 의심한다. 첫 번째 것은 인코딩이 올바르게 처리되었지만, CoreData에서 검색하는 일부 작업 (데이터를 가져 와서 반영)을 수행하자 마자 두 번째 서버가 DB에 위조 된 것을 저장하는 인코딩! 답변 해 주셔서 대단히 감사합니다 !! – djay