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