? Estoy trabajando en el capítulo "Codificación de valor de clave" en "Programación para Mac OS X". Construí una interfaz con un control deslizante y una etiqueta, ambos vinculados a fido, un int. Si configuro la propiedad de fido como de solo lectura, mover el control deslizante aún hace que la etiqueta cambie su valor. Supuse que obtendría algún tipo de error por esto. Si la propiedad es de solo lectura, ¿cómo es que el control deslizante todavía puede escribir en la propiedad? Pensé que no tendría setters creados, y KVC no funcionaría. Gracias.¿Por qué una propiedad de solo lectura todavía permite escribir con KVC
Aquí está el código que estoy usando:
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject
{
int fido;
}
@property (readonly, assign) int fido;
@end
#import "AppController.h"
@implementation AppController
@synthesize fido;
- (id)init
{
[super init];
[self setValue:[NSNumber numberWithInt:5] forKey:@"fido"];
NSNumber *n = [self valueForKey:@"fido"];
NSLog(@"fido = %@", n);
return self;
}
@end
alt text http://idisk.me.com/nevan/Public/Pictures/Skitch/Window-20091001-174352.png
También puede usar + (BOOL) accessInstanceVariablesDirectly {return NO; } para eliminar este comportamiento KVC – sbooth
Buen punto y un buen hábito para entrar. ¡Gracias! – bbum
Excelente respuesta, gracias. La razón por la que formulé esta pregunta fue que uno de los puntos principales del capítulo es que KVC usa los setters y getters. Supuse que esa era la única forma en que trabajaban. El estilo init es el estilo que usa en el libro. Él dice que las clases que subclases nunca devuelven nada, por lo que deja fuera el cheque por simplicidad. –