啊,我认为问题不在于你需要转换你的数组——而是你如何显示字符串。
检查包含土耳其足球运动员数组的代码:
NSMutableArray *questions = [[NSMutableArray alloc] initWithObjects:@"Emre Belözoğlu", @"Gökhan Gönül", @"Mevlüt Erdinç", @"Nuri Şahin", nil];
const char *utf8string = [[NSString stringWithFormat:@"%@", [questions objectAtIndex:0]] UTF8String];
self.title = [NSString stringWithUTF8String:utf8string];
它现在应该以正确的格式将页面标题显示为“Emre Belözoğlu”。
问题也可能与将数据从 SQLite 解析到您的NSMutableArray
. 这是我为一级方程式应用程序实现它的方法。
在viewDidLoad
我打电话时[self loadNamesFromDatabase];
,它看起来像:
- (void)loadNamesFromDatabase
{
NSString *file = [[NSBundle mainBundle] pathForResource:@"Formula1" ofType:@"sqlite"];
sqlite3 *database = NULL;
if (sqlite3_open([file UTF8String], &database) == SQLITE_OK) {
sqlite3_exec(database, "select driver_id, driver_name, driver_nation, driver_team from drivers", MyCallback, drivers, NULL);
}
sqlite3_close(database);
}
你看到的MyCallback
功能如下:
static int MyCallback(void *context, int count, char **values, char **columns)
{
NSMutableArray *drivers = (NSMutableArray *)context;
NSString *columnName;
NSString *columnValue;
NSMutableDictionary * record = [NSMutableDictionary dictionary];
for (int i=0; i < count; i++) {
columnName = [NSString stringWithUTF8String:columns[i]];
if (values[i]){
columnValue = [NSString stringWithUTF8String:values[i]];
}
else{
columnValue = @"";
}
[record setObject:columnValue forKey:columnName];
}
[drivers addObject:record];
return SQLITE_OK;
}
哪里drivers
是NSMutableArray
。这里的关键是stringWithUTF8String
,您不需要使用顶部的代码,因为所有数据都应正确编码,因此将正确显示。