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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top