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]];
}
이 모든 코드는 다른 UITableViewController
에 appDelegate.words
에서 데이터로 채워 된 AppDelegate.m
UITableView
입니다.
다음은 문제입니다. 터키어 문자가있는 셀은 다음과 같습니다. This :
이제 단어의 세부 정보를 원한다고 가정합니다. 새 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 행이 반환되고 입력 된 결과는 원하는 결과를 반환합니다.
정말 어떻게해야할지 모르겠군요.
데이터베이스의'PRAGMA의 encoding'은 무엇입니까
[myString lowercaseString]
를 사용? 원래 문자열과 삽입중인 문자열이 둘 다 동일한 문자열 인코딩을 사용하고 있다고 확신합니까? 결과'NSData'를'dataForColumn'과'NSLog'를 사용하여 데이터베이스의 실제 표현을 확인할 수 있습니다 (예 :'6669cc87 6c6469cc 87c59f69 cc872073 616869cc 876c69cc 87'). 'WHERE' 절에서 사용중인 문자열에 대해이 과정을 반복하고 16 진 표현을 비교하십시오. 또한'stringWithFormat'으로 SQL을 구현하는 대신 SQL에서 '?'자리 표시자를 사용하는 것이 좋습니다. – Rob아니면, 데이터베이스에서 가져온 값에 대해 'lowercaseString'을 수행하고 있다는 사실로 인해 발생할 수있는 결과가 있습니까? – Rob