让NSMutableArray属性填充枚举值

时间:2013-02-02 23:03:58

标签: ios properties nsmutablearray enumerated-types

尝试使用枚举值填充的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];
}

2 个答案:

答案 0 :(得分:0)

[[self arrowsPkg]objectAtIndex:1]NSNumber,不是Arrow枚举的成员。就像在NSNumber对象的初始化期间一样,您应该通过调用它上面的intValue来转换对象及其封闭值。

(而且,真的,重新阅读C和Objective-C教程。这是琐碎。

答案 1 :(得分: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];

您要将Arrow枚举类型存储在NSNumber的{​​{1}}中,因此您需要将btn1Clicked:中的这些值从GetItemOne类型拆分到较早的版本NSNumber *值。