我正在为iPhone编写一个应用程序。它从“sqlite”数据库读取数据,将数据放入NSMutableArray
并在UITableView
中显示数据(“indexPath”对应于数据库中的id
列)。数据库中的一列是turkish_words
,其中包含土耳其语单词,如İöşüçğı
。我正在使用“FMDB框架”从数据库中读取数据。
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]];
}
所有这些代码都在AppDelegate.m
UITableView
随后会填充其他appDelegate.words
中UITableViewController
的数据。
接下来是问题所在。带有土耳其语字符的单元格看起来像This:
现在让我们说我想要这个词的细节。当我点击包含单词的单元格时,将推送新的UIView
。 Word将传递给
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
一切正常,我点击“DetailViewController”中的单词。现在我正在尝试根据我之前SELECT
中的单词创建UITableViewController
语句。当我NSLog
它时,它看起来很好,例如:
SELECT id,turkish_word,detail FROM words WHERE turkish_word =“fi̇ldi̇şi̇saḣli̇”
它看起来不错,但结果得到0行。当我使用“sqlite bash”运行查询时,它也返回0行,但是当我输入它时,我得到了我想要的行。请记住,复制的一个和键入的一个看起来相同,复制的一个从NSLog
复制,它返回0行,键入的一行返回我想要的结果。
我真的不知道该怎么办。
答案 0 :(得分:1)
问题出现了,因为我正在向[myNSString lowercaseString]
添加NSMutableArray
字词。似乎字符串编码在该过程中被更改,导致我无法查询选定的单元格文本。
相反,我已将原始记录添加到NSMutableArray
,并在方法中创建了单独的NSStrings:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
然后使用[myString lowercaseString]