ああ、問題は配列を変換する必要があることではなく、文字列を表示する方法だと思います。
トルコのサッカー選手の配列を持つ次のコードを確認してください。
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 から .xml に解析される方法に問題がある可能性がありますNSMutableArray
。Formula 1 アプリでそれを達成した方法を次に示します。
私は次のよう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
、すべてのデータが適切にエンコードされ、正しく表示されるため、上部のコードを使用する必要がないことです。