2013-02-02 29 views
0

试图通过由枚举值填充的NSMutableArray属性获取枚举值。获取使用枚举值填充的NSMutableArray属性

所有我想要的是设置一个动态属性并在类实例中恢复。

因此, 我编写了一个明确的例子,揭露问题。

问题是这样的。示例中的WriteByType方法永远不会获得正确的值。 应该记录“你找右箭头”,但它并不

//---------------------------------------------------------- 
// CCMyClass.h 
#import <Foundation/Foundation.h> 

typedef enum { 
    aLeft, 
    aRight 
} Arrow; 

@interface CCMyClass : NSObject 
{ 
    NSMutableArray *_arrowsPkg; 
} 
@property(nonatomic,copy) NSMutableArray *arrowsPkg; 
@property (nonatomic)int nextPkgIndex; 
-(void)GetItemOne; 
@end 
//------------------------------------------------------------- 
// CCMyClass.m 
#import "CCMyClass.h" 

@implementation CCMyClass 
@synthesize arrowsPkg=_arrowsPkg; 

-(void)WriteByType:(Arrow)AArrow 
{ 
switch (AArrow) { 
    case aLeft: 
     NSLog(@"You Get Left Arrow"); 
     break; 
    case aRight: 
     NSLog(@"You Get Right Arrow"); 
     break; 
    } 
} 

-(void)GetItemOne 
{ 
    Arrow a =(Arrow)[[self arrowsPkg]objectAtIndex:1]; 
    [self WriteByType:a]; 

} 
@end 
//---------------USAGE EXAMPLE---------------------------------------------- 
// CCAppDelegate.m 
- (IBAction)btn1Clicked:(id)sender { 

    CCMyClass *c1=[[CCMyClass alloc]init]; 
    NSNumber *v1=[NSNumber numberWithInt:aLeft]; 
    NSNumber *v2=[NSNumber numberWithInt:aRight]; 

    NSMutableArray *arr1=[NSMutableArray arrayWithObjects:v1,v2, nil]; 
    [c1 setArrowsPkg:arr1]; 
    [c1 GetItemOne]; 
} 

回答

0

更换

Arrow a = (Arrow)[[self arrowsPkg] objectAtIndex:1]; 

Arrow a = (Arrow)[[[self arrowsPkg] objectAtIndex:1] intValue]; 

,或者更明确书面

NSNumber *arrowNumber = [[self arrowsPkg] objectAtIndex:1]; 
Arrow a = [arrowNumber intValue]; 

您在NSNumber存储您Arrow枚举类型btn1Clicked:,所以你需要从NSNumber *类型GetItemOne拆箱这些值早期int值。

+0

谢谢! 可能是我需要更改问题。 如何存储枚举值? ie.like this: NSMutableArray * arr1 = [NSMutableArray arrayWithObjects:aLeft,aLeft,aLeft,aRight,aLeft,aRight,nil]; 有人说: “正确的做法是不使可变数组属性” 你对这个标题有什么看法?[link](http:// stackoverflow。com/questions/816720/whats-the-best-way-to-use-obj-c-2-0-properties -with-mutable-objects-such-as) –

+0

如果您使用的是最新版本的Xcode(和LLVM),你应该可以使用新的Objective-C NSNumber装箱语法,它可以像这样使用:'[NSMutableArray arrayWithObjects:@(aLeft),@(aRight),nil];' – mopsled

+0

did not know那。谢谢@mopsled。 –

0

[[self arrowsPkg]objectAtIndex:1]NSNumber,在Arrow枚举而不是成员。就像在NSNumber对象的初始化过程中一样,您应该通过调用intValue来转换对象与其封闭值之间的关系。

(真的,重新读了C和Objective-C教程。这是微不足道。

+0

感谢您的快速响应。 想要通过索引获取实例对象数组属性中的值。 即0 表示实例对象的ArrowsPkg [0]。 所以它是aLeft.and它应该记录“你得到右箭头”,但它没有。 –

+0

@ N.Ramos你从事这些工作吗? – 2013-02-02 23:10:55

+0

想要通过索引获取实例对象的数组属性中的值。即0表示实例对象的ArrowsPkg [0]。所以它是aLeft.and它应该记录“你得到左箭头”,但它不。 –