Objective c 如何在动态属性中使用typedef?

Objective c 如何在动态属性中使用typedef?,objective-c,enums,typedef,getter-setter,Objective C,Enums,Typedef,Getter Setter,这是我第一次尝试使用typedef。诚然,我不太清楚到底发生了什么,但我的理解是,typedef中的值被赋值为从0开始的整数。我曾尝试将它们用作整数,但我收到了各种警告和错误。其中一个是“[NSCFNumber objectForKey:]:发送到实例的无法识别的选择器”。我不知道如何解决这个问题。我也没有写太多动态getter/setter,所以我的方法可能是错误的。请帮忙 // MyView.h typedef enum { STYLE_A, STYLE_B, S

这是我第一次尝试使用typedef。诚然,我不太清楚到底发生了什么,但我的理解是,typedef中的值被赋值为从0开始的整数。我曾尝试将它们用作整数,但我收到了各种警告和错误。其中一个是“[NSCFNumber objectForKey:]:发送到实例的无法识别的选择器”。我不知道如何解决这个问题。我也没有写太多动态getter/setter,所以我的方法可能是错误的。请帮忙

// 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



没有理由在该代码中使用
valueForKey:
;直接获取/设置各种属性即可

-(MyShapeStyle)shapeStyle
{
    return (MyShapeStyle) self.myLayer.style;
}
在该代码中也不需要
@动态
。仅当您要动态生成方法时才需要这样做

至于为什么
objectForKey:
没有响应错误,该代码中没有任何东西会触发该错误。可能是保留/发布问题,也可能是其他代码中未显示的问题。

谢谢。没错,“valueForKey”是来自不同实现的遗留代码。我使“风格”成为MyLayerDelegate的财产。不过,我有一个问题。如果我将“style”类型设置为“int”,那么一切都会正常工作。但如果我将其设置为“MyShapeStyle”,我会得到一个错误“在'MyShapeStyle'之前的预期说明符限定符列表”?
// MyLayerDelegate.m

-(void)drawLayer:(CALayer *)theLayer inContext:(CGContextRef)theContext
{

    int id = [[theLayer valueForKey:@"style"] integerValue];

   if( id == STYLE_A )
   {
   }else if ( id == STYLE_B ){
   }

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