Sto lavorando attraverso il capitolo "Codifica valore chiave" in "Programmazione per Mac OS X". Ho costruito un'interfaccia con un cursore e un'etichetta, entrambi legati a fido, un int. Se imposto la proprietà per fido a sola lettura, lo spostamento del cursore fa sì che l'etichetta cambi il suo valore. Avevo pensato che avrei avuto una sorta di errore per questo. Se la proprietà è in sola lettura, come mai il cursore può ancora scrivere nella proprietà? Pensavo che non avrebbe creato nessun setter e che KVC non avrebbe funzionato. Grazie.Perché una proprietà readonly consente ancora la scrittura con KVC
Ecco il codice che sto utilizzando:
#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
Puoi anche usare + (BOOL) accessInstanceVariablesDirectly {return NO; } per eliminare questo comportamento KVC – sbooth
Un buon punto e una buona abitudine per entrare. Grazie! – bbum
Ottima risposta, grazie. Il motivo per cui ho fatto questa domanda è che uno dei punti principali del capitolo è che KVC usa i setter e i getter. Avevo pensato che fosse l'unico modo in cui lavoravano. Lo stile di init è lo stile che usa nel libro. Dice che le classi che sottoclasse non restituiscono mai nulla, quindi lascia il controllo per semplicità. –