2009-12-18 11 views
12

Quiero ser capaz de anular el getter en una propiedad de cadena en uno de mis modelos de datos principales y dentro del getter necesito averiguar cuál es el valor para esa propiedad.¿Cómo puedo anular un getter en una propiedad cuando uso Core Data?

@interface LabTest : NSManagedObject { 
} 
@property (nonatomic, retain) NSString *status; 
@end 

@implementation LabTest 

@dynamic status; 

- (NSString *)status { 
    NSString *tempStatus = [super valueForKey:@"status"]; 
    //do some checking here 
    return tempStatus; 
} 

@end 

El código anterior bloquea el proceso. He intentado algunas cosas diferentes, pero creo que todos terminan en un bucle infinito con el programa bloqueado con un código de 139.

¿Cuál es la forma correcta de acceder a un miembro de datos básicos en el getter de esta manera?

Respuesta

24

¿Has probado [self primitiveValueForKey:@"status"] en lugar de [super valueForkey:@"status"]?

+0

Es lo que estaba buscando. ¡Gracias! –

+1

Bizarre cómo no es un primitivo ... –

1

El creador del objeto administrado en x-code tiene una casilla de verificación que normalmente no está seleccionada solo para este propósito.

Validation Methods http://www.nwcode.com/img/ValidationMethods.png

+0

No estoy haciendo bastante la validación, ya que todavía quiero devolver un valor, es posible que desee cambiarlo un poco en algunos casos. Gracias. –

2

Sólo en caso de que alguien está buscando un poco más de información sobre cómo reemplazar los métodos getter y aterrizó en esta página ...

Dentro de la definición de la propiedad puede especificar los métodos getter y setter de la siguiente manera:

@property (nonatomic, retain, getter = getterMethodName, setter = setterMethodName) NSString *someString; 

Puede especificar solo el captador, el colocador solamente o ambos.

Cuestiones relacionadas