Frage

Es ist das erste Mal, ich versuche typedef zu verwenden. Zwar habe ich nicht eine sehr klare Vorstellung davon, was los ist, aber mein Verständnis war, dass die Werte innerhalb typedef ganzen Zahlen zugewiesen bekommen mit 0 beginnend Ich habe versucht, sie als ganze Zahlen zu verwenden, aber ich verschiedene Warnungen und Fehlermeldungen erhalten. Einer von ihnen ist „[NSCFNumber objectForKey:]: Unbekannter Selektor an Instanz gesendet“. Ich weiß nicht, wie dies zu beheben. Ich habe auch keine dynamischen Getter / Setter viel geschrieben, so dass mein Ansatz falsch sein könnte. Bitte Hilfe.

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

}
War es hilfreich?

Lösung

Es gibt keinen Grund zu verwenden valueForKey: in diesem Code; get / set nur die verschiedenen Eigenschaften direkt.

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

Es gibt auch keine Notwendigkeit, dass der @dynamic in diesem Code. Das ist nur erforderlich, wenn Sie gehen, um dynamisch die Methoden zu erzeugen.

Was, warum die objectForKey: tut-nicht-Respond Fehler, gibt es nichts in diesem Code, dass auslösen soll. Könnte ein behalten / release Problem sein, oder es könnte ein Problem in einem anderen Code sein, dass Sie nicht gezeigt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top