¿Cómo anular el método de descripción de un objeto e imprimirlo?

Necesito anular el description método para devolver el estado interno del objeto (en otras palabras, volcar todos los valores en una sola línea de texto).

En mi modelo (clase) tengo

Tarea.h

#import <Foundation/Foundation.h>

@interface Homework : NSObject

@property (nonatomic, strong) NSString *className;
@property (nonatomic, strong) NSString *assignmentTitle;

@end

tarea.m

-(NSString *)description
{
return [NSString stringWithFormat:@" %@, %@", self.className, self.assignmentTitle];
}

Creé un objeto en mi ViewController

@property (nonatomic, strong) Homework *homeworkAssignment;

Y trato de imprimirlo así

  NSLog(self.homeworkAssignment.description);

Pero parece que no funciona, la salida imprime una coma ",". ¿Estoy formateando el NSLog ¿equivocado? ¿Anulé el método correctamente? Esta es mi primera aplicación (además de "Hello World").

preguntado el 29 de septiembre de 13 a las 22:09

"Parece que no funciona", ¿qué hace en su lugar? -

La salida imprime una coma, -

entonces muy probablemente self.className y self.assignmentTitle ambos contienen cadenas vacías. -

¿Imprimiría (nulo) si la cadena estuviera vacía? -

No, eso si es nil. No imprime nada si es una cadena vacía. ¿Dónde asignas a la className y assignmentTitle propiedades? -

2 Respuestas

Su código funciona bien, incluso puede simplemente NSLog así:

NSLog(@"%@", self.homeworkAssignment);

que regresa

2013-09-29 23:56:50.375 test[2769:a0b] (null), (null)

Intente asignar valores a su nombre de clase y título de asignación, para que no devuelva un valor nulo :)

Respondido el 29 de Septiembre de 13 a las 22:09

Lea la pregunta - no regresa (null). - rmady

Bueno, copié/pegué su código y probé un proyecto nuevo y fresco, eso es lo que me devolvió: Ticko

Pero no es lo que estaba obteniendo el OP. La diferencia es que nunca establece ningún valor para las dos propiedades (de ahí el (null) salida) mientras que el OP los había configurado en cadenas vacías (por eso solo tiene una coma y nada más). - rmady

Todo el código parece correcto con respecto a la implementación de description y el registro. Dado que la salida solo muestra una coma, significa que sus dos propiedades contienen cadenas vacías. si fueran nil el formato de cadena los mostraría como (null).

Hay una diferencia entre un nil puntero y una referencia a la cadena vacía (@"").

Respondido el 29 de Septiembre de 13 a las 23:09

Funciona ahora, pero recibo una advertencia cuando hago NSLog(self.homeworkAssignment.description); Eso dice (la cadena de formato no es una cadena literal: potencialmente insegura). ¿Sabes cómo podría deshacerme de esto? - Mike

cambiar su NSLog a la forma en que "Ticko" lo tiene en su respuesta. - rmady

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.