0
這是我第一次嘗試使用typedef。無可否認,我並不清楚發生了什麼,但是我的理解是,typedef中的值從0開始分配整數。我試圖將它們用作整數,但我得到各種警告和錯誤。其中之一是「[NSCFNumber objectForKey:]:無法識別的選擇器發送到實例」。我不知道如何解決這個問題。我也沒有寫出動態的getter/setter,所以我的方法可能是錯誤的。請幫忙。如何在動態屬性中使用typedef?
// 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」是來自不同實現的遺留代碼。我將「style」作爲MyLayerDelegate的一個屬性。但是,我有一個關於這個問題。如果我使「風格」類型「int」一切正常。但如果我輸入「MyShapeStyle」,我會在'MyShapeStyle'之前出現錯誤「Expected specifier-qualifier-list'」? – anna 2010-10-20 16:53:16