C'est la première fois que j'essaie d'utiliser typedef. Certes, je n'ai pas une idée très claire de ce qui se passe, mais je crois comprendre que les valeurs de typedef reçoivent des entiers commençant par 0. J'ai essayé de les utiliser comme entiers mais j'ai reçu divers avertissements et erreurs. L'un d'eux est "[NSCFNumber objectForKey:]: sélecteur non reconnu envoyé à l'instance". Je ne sais pas comment résoudre ce problème. Je n'ai pas non plus beaucoup écrit de getters/setters dynamiques, donc mon approche pourrait être fausse. S'il vous plaît aider.Comment utiliser typedef dans les propriétés dynamiques?
// MyView.h
typedef enum
{
STYLE_A,
STYLE_B,
STYLE_C,
STYLE_D
} MyShapeStyle;
@interface MyView : UIView
{
MyShapeStyle shapeStyle;
CALayer *myLayer;
MyLayerDelegate *myLayerDelegate;
}
@property (nonatomic) MyShapeStyle shapeStyle;
@property (nonatomic, retain) CALayer *myLayer;
@property (nonatomic, retain) MyLayerDelegate *myLayerDelegate;
@end
// MyView.m
#import "MyView.h"
@implementation MyView
@dynamic shapeStyle;
@synthesize myLayer;
@synthesize myLayerDelegate;
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame]))
{
// Initialization code
MyLayerDelegate *delegate = [[MyLayerDelegate alloc] init];
self.myLayerDelegate = delegate;
CALayer *myLayer = [CALayer layer];
[myLayer setDelegate:delegate];
[self.layer addSublayer:myLayer];
self.myLayer = myLayer;
self.shapeStyle = STYLE_C;
[delegate release];
}
return self;
}
-(MyShapeStyle)shapeStyle
{
return [[self.myLayer valueForKey:@"style"] integerValue];
}
- (void)setShapeStyle:(MyShapeStyle)style
{
[self.myLayer setValue:[NSNumber numberWithInt:style] forKey:@"style"];
}
// MyLayerDelegate.m
-(void)drawLayer:(CALayer *)theLayer inContext:(CGContextRef)theContext
{
int id = [[theLayer valueForKey:@"style"] integerValue];
if(id == STYLE_A)
{
}else if (id == STYLE_B){
}
}
Merci. Vous avez raison "valueForKey" était le code restant d'une implémentation différente. J'ai fait "style" une propriété de MyLayerDelegate. Cependant, j'ai une question à ce sujet. Si je fais "style" tapez "int" tout fonctionne. Mais si je le fais tapez "MyShapeStyle", j'obtiens une erreur "Expected-specifier-qualifier-list avant 'MyShapeStyle'"? – anna