Pregunta

Es la primera vez que estoy tratando de utilizar typedef. La verdad es que no tengo una idea muy clara de lo que está pasando, pero mi entendimiento es que los valores dentro de typedef obtener números enteros que empiezan con 0. He intentado utilizarlos como números enteros asignados pero me da varios avisos y errores. Uno de ellos es "[NSCFNumber objectForKey:]: Selector no reconocido enviado a la instancia". No sé cómo solucionar esto. Tampoco he escrito getters / setters dinámicas mucho, por lo que mi enfoque podría estar equivocado. Por favor, ayuda.

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

}
¿Fue útil?

Solución

No hay razón para el uso valueForKey: en ese código; acaba de obtener / ajustar directamente las diversas propiedades.

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

No hay tampoco necesidad de que el @dynamic en dicho código. Que sólo es necesario si se va a generar dinámicamente los métodos.

En cuanto a por qué el objectForKey: hace-no-responde de error, no hay nada en ese código que deben dar lugar a eso. Podría ser un problema de retener / liberar o podría ser un problema en algún otro código que no se han mostrado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top