Вопрос

Это первый раз, когда я пытаюсь использовать Typedef. По общему признанию, у меня не очень четкое представление о том, что происходит, но мое понимание было то, что значения внутри Typedef получают целые числа, начиная с 0. Я пытался использовать их как целые числа, но я получаю различные предупреждения и ошибки. Одним из них является «[NSCFNumber ObjectForkeyKey:]: нераспознанный селектор, отправленный на экземпляр». Я не знаю, как это устранить. Я также не написал динамические Getter / Getters многое, поэтому мой подход может быть неправильным. Пожалуйста помоги.

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

}
Это было полезно?

Решение

Нет причин использовать valueForKey: в этом коде; Просто получите / установите различные свойства напрямую.

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

Там также нет необходимости в @dynamic в этом коде. Это только необходимо, если вы собираетесь динамически генерировать методы.

Что касается того, почему objectForKey: Ошибка не отвечает, что в этом коде ничего не совсем не вызывает. Может быть проблема сохранения / выпуска или это может быть проблемой в каком-то другом коде, который вы не показали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top