動的プロパティでtypedefを使用する方法は?
-
09-10-2019 - |
質問
Typedefを使用しようとしているのは初めてです。確かに、私は何が起こっているのかについて非常に明確な考えを持っていませんが、Typedef内の値は0から始まる整数が割り当てられているということでした。そのうちの1つは、「[nscfnumber objectforkey:]:notocognized selectorがインスタンスに送信される」です。これをトラブルシューティングする方法がわかりません。また、私はダイナミックゲッター/セッターをあまり書いていないので、私のアプローチが間違っているかもしれません。助けてください。
// 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:
エラーがありませんが、そのコードにはそれをトリガーするものは何もありません。保持/リリースの問題である可能性があるか、表示していない他のコードで問題になる可能性があります。
所属していません StackOverflow