2010-10-20 64 views
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){ 
    } 

} 

回答

1

沒有理由在代碼中使用valueForKey:;直接獲取/設置各種屬性。

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

該代碼中也不需要@dynamic。這隻有在你要動態生成方法時才需要。

至於爲什麼objectForKey:沒有響應錯誤,該代碼中沒有任何內容會觸發該錯誤。可能是保留/發佈問題,或者可能是您未顯示的其他代碼中的問題。

+0

謝謝。你是對的「valueForKey」是來自不同實現的遺留代碼。我將「style」作爲MyLayerDelegate的一個屬性。但是,我有一個關於這個問題。如果我使「風格」類型「int」一切正常。但如果我輸入「MyShapeStyle」,我會在'MyShapeStyle'之前出現錯誤「Expected specifier-qualifier-list'」? – anna 2010-10-20 16:53:16

相關問題