2014-05-11 3 views
1

iPhone 용 응용 프로그램을 하나 쓰고 있습니다. "sqlite"데이터베이스에서 데이터를 읽고 데이터를 NSMutableArray에 넣고 UITableView ("indexPath"는 데이터베이스의 id 열에 해당)에 데이터를 표시합니다. 데이터베이스의 한 열은 turkish_words이고 İöşüçğı과 같은 터키어 문자가 포함 된 터키어가 들어 있습니다. "FMDB 프레임 워크"를 사용하여 데이터베이스에서 데이터를 읽습니다. UITableViewController 및 SQLite 문에서 터키어 문자

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsPath = [paths objectAtIndex:0]; 
NSString *dbPath = [docsPath stringByAppendingPathComponent:dbFileName]; 

FMDatabase *database = [FMDatabase databaseWithPath:dbPath]; 
[database open]; 
NSString *sqlSelectQuery = @"SELECT id,turkish_word FROM words"; 

그때 나는이 같은 NSMutableArray에 데이터를 추가 해요 :

FMResultSet *resultsWithNameLocation = [database executeQuery:sqlSelectQuery]; 
while([results next]) { 
    NSString *strID = [NSString stringWithFormat:@"%d",[results intForColumn:dbIDKey]]; 
    NSString *strTur = [NSString stringWithFormat:@"%@",[results stringForColumn:dbTurkishKey]]; 

[self.words insertObject:[strTur lowercaseString] atIndex:[strID integerValue]]; 

} 

이 모든 코드는 다른 UITableViewControllerappDelegate.words에서 데이터로 채워 된 AppDelegate.m

UITableView입니다.

다음은 문제입니다. 터키어 문자가있는 셀은 다음과 같습니다. This : enter image description here

이제 단어의 세부 정보를 원한다고 가정합니다. 새 UIView은 단어가 포함 된 셀을 클릭하면 푸시됩니다. Word가 "DetailViewController"로 전달됩니다.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

모든 것이 작동하며 "DetailViewController"를 클릭 한 단어가 표시됩니다. 이제 UITableViewController에서 얻은 단어를 바탕으로 SELECT 문을 작성하려고합니다. 내가 NSLog 때, 예를 들어, 좋은 모습입니다 :

SELECT ID, turkish_word, 세부 단어에서 WHERE turkish_word = "fi̇ldi̇şi̇ sahi̇li̇"

이 좋아 보인다,하지만 결과 0 행을 얻을. "sqlite bash"를 사용하여 쿼리를 실행하면 0 행이 반환되지만 입력하면 원하는 행이 생깁니다. 복사 된 것과 형식화 된 것이 동일하게 보이고, 복사 된 것이 복사됩니다. NSLog에서 복사되고 0 행이 반환되고 입력 된 결과는 원하는 결과를 반환합니다.

정말 어떻게해야할지 모르겠군요.

+0

데이터베이스의'PRAGMA의 encoding'은 무엇입니까 [myString lowercaseString]를 사용? 원래 문자열과 삽입중인 문자열이 둘 다 동일한 문자열 인코딩을 사용하고 있다고 확신합니까? 결과'NSData'를'dataForColumn'과'NSLog'를 사용하여 데이터베이스의 실제 표현을 확인할 수 있습니다 (예 :'6669cc87 6c6469cc 87c59f69 cc872073 616869cc 876c69cc 87'). 'WHERE' 절에서 사용중인 문자열에 대해이 과정을 반복하고 16 진 표현을 비교하십시오. 또한'stringWithFormat'으로 SQL을 구현하는 대신 SQL에서 '?'자리 표시자를 사용하는 것이 좋습니다. – Rob

+0

아니면, 데이터베이스에서 가져온 값에 대해 'lowercaseString'을 수행하고 있다는 사실로 인해 발생할 수있는 결과가 있습니까? – Rob

답변

1

단어가있는 NSMutableArray[myNSString lowercaseString]을 추가했기 때문에 문제가 발생했습니다. 그 과정에서 문자열 인코딩이 변경되어 선택된 셀 텍스트를 쿼리 할 수 ​​없었던 것 같습니다.

대신 나는 NSMutableArray에 원래의 기록을 추가 및 방법에 별도의 NSStrings을 만들었습니다

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

한 다음