Question

Il est la première fois que je suis en train d'utiliser typedef. Il est vrai que je n'ai pas une idée très claire de ce qui se passe, mais je crois comprendre que les valeurs à l'intérieur typedef obtenir attribués entiers commençant par 0. J'ai essayé de les utiliser comme des entiers, mais je reçois différents avertissements et erreurs. L'un d'eux est « [NSCFNumber objectForKey:]: sélecteur non reconnu envoyé à l'instance ». Je ne sais pas comment résoudre cela. J'ai pas écrit getters / setters dynamiques beaucoup, donc mon approche peut-être tort. S'il vous plaît aider.

// 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 ){
   }

}
Était-ce utile?

La solution

Il n'y a aucune raison d'utiliser valueForKey: dans ce code; juste obtenir / définir les différentes propriétés directement.

-(MyShapeStyle)shapeStyle
{
    return (MyShapeStyle) self.myLayer.style;
}

Il n'y a pas non plus besoin pour le @dynamic dans ce code. C'est nécessaire que si vous allez générer dynamiquement les méthodes.

Quant à savoir pourquoi le objectForKey: ne-pas-répondre erreur, il n'y a rien dans ce code qui devrait déclencher cela. Peut-être un retain / numéro de version ou il pourrait être un problème dans un autre code que vous avez pas montré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top