Objective-C NSString: caracteres extraños al iniciar sesión
-
22-07-2019 - |
Pregunta
Hola a todos, soy un novato en lo que respecta al desarrollo de Objective-C / iPhone.
Estoy tratando de extraer texto de una base de datos SQLite. Tengo un ciclo while que se ve así:
while(sqlite3_step(selectstmt) == SQLITE_ROW) {
Y dentro de ese ciclo, esto se imprime en el registro bien:
NSLog(@"Text: %s",sqlite3_column_text(selectstmt, 1));
Esto no funciona:
Category *categoryObj = [[Category alloc] initWithPrimaryKey:primaryKey];
categoryObj.categoryName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
NSLog(@"cat name: %s",categoryObj.categoryName);
Cuando ejecuto lo anterior y miro los registros que veo:
cat name: ‡}00å
Traté de escribir el campo en una etiqueta, pensando que podría ser algo específico del NSLog pero no aparece nada allí. Claramente me estoy perdiendo algo fundamental, pero estoy perdido por lo que es.
Solución
Registre su cadena con % @
en lugar de % s
y estará bien. Los NSString
no son punteros a los caracteres, son objetos completos, por lo que debe usar el " objeto " marcador de posición en la cadena de formato de registro.
Esto tiene la ventaja adicional de hacer lo correcto con cadenas que no son ASCII y todas las otras cosas importantes que NSString
le brinda.
Tenga en cuenta que si acaba de registrar el resultado de SQLite directamente en lugar de crear un NSString
con él, entonces su % s
habría sido correcto.
Recuerde: % s
es para cadenas C, % @
es para objetos Objective-C.