Ios 获取用枚举值填充的NSMutableArray属性

Ios 获取用枚举值填充的NSMutableArray属性,ios,properties,nsmutablearray,enumerated-types,Ios,Properties,Nsmutablearray,Enumerated Types,试图通过索引从用枚举值填充的NSMutableArray属性获取枚举值 我想要的只是设置一个动态属性,并在类实例中设置回退 因此,, 我编写了一个清晰的示例,暴露了问题的严重性 问题就在于此。示例中的WriteByType方法从未获得正确的值。 它应该记录“You Get Right Arrow”,但它没有 //---------------------------------------------------------- // CCMyClass.h #import <Founda

试图通过索引从用枚举值填充的NSMutableArray属性获取枚举值

我想要的只是设置一个动态属性,并在类实例中设置回退

因此,, 我编写了一个清晰的示例,暴露了问题的严重性

问题就在于此。示例中的WriteByType方法从未获得正确的值。 它应该记录“You Get Right Arrow”,但它没有

//----------------------------------------------------------
//  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];
}
//----------------------------------------------------------
//Cmcyclass.h
#进口
类型定义枚举{
阿列夫特,
正确的
}箭;
@接口CCMyClass:NSObject
{
NSMutableArray*_arrowsPkg;
}
@属性(非原子,复制)NSMUTABLEARRY*arrowsPkg;
@属性(非原子)int-nextPkgIndex;
-(无效)GetItemOne;
@结束
//-------------------------------------------------------------
//Cmcyclass.m
#导入“CCMyClass.h”
@实现CCMyClass
@合成arrowsPkg=_arrowsPkg;
-(void)WriteByType:(箭头)行
{
交换机(AArrow){
案例阿列夫特:
NSLog(@“你得到左箭头”);
打破
情况正确:
NSLog(@“你得到了正确的箭头”);
打破
}
}
-(void)GetItemOne
{
箭头a=(箭头)[[self arrowsPkg]objectAtIndex:1];
[自写类型:a];
}
@结束
//---------------用法示例----------------------------------------------
//CCAppDelegate.m
-(iAction)BTN1已单击:(id)发件人{
CCMyClass*c1=[[CCMyClass alloc]init];
NSNumber*v1=[NSNumber NUMBER WITHINT:aLeft];
NSNumber*v2=[NSNumber NUMBER WITHIT:aRight];
NSMUTABLEARRY*arr1=[NSMUTABLEARRY arrayWithObjects:v1、v2、nil];
[c1设置箭头SPKG:arr1];
[c1 GetItemOne];
}

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

(事实上,请重新阅读C和Objective-C教程。这是一个微不足道的教程。)

替换

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

或者,写得更清楚些

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

您正在
btn1Clicked:
NSNumber
中存储
箭头
枚举类型,因此您需要在
GetItemOne
中将这些值从
NSNumber*
类型取消到早期的
int
值。

感谢您的快速响应。WANTO通过索引获取实例对象数组属性中的值。ie 0表示实例对象的箭头SPKG[0]。所以它是aLeft。它应该记录“You Get Right Arrow”,但它没有。@N.Ramos还有什么可以阻止你这样做?通过索引获取实例对象数组属性中的值。ie 0表示实例对象的箭头SPKG[0]。所以它是aLeft。它应该记录“You Get Left Arrow”,但它没有。@N.Ramos在尝试了我的建议后,它会的。那么,我如何用枚举值而不是纯整数值填充呢?你介意给我推荐一本资料或书,上面有一页解释“如何用枚举值而不是纯整数或nsinteger填充NSMutableArray”吗?我只知道指定的枚举值是实数。谢谢!也许我需要改变这个问题。如何存储枚举值?例如:NSMutableArray*arr1=[NSMutableArray数组,其对象为:aLeft,aLeft,aLeft,aRight,aLeft,aRight,nil];有人说:“正确的方法是不要让可变数组成为属性”。您对这个标题怎么看?如果您使用的是最新版本的Xcode(和LLVM),您应该能够使用新的Objective-C NSNumber装箱语法,可以这样使用:
[NSMutableArray arrayWithObjects:@(aLeft),@(Arright),nil]NSNumber *arrowNumber = [[self arrowsPkg] objectAtIndex:1];
Arrow a = [arrowNumber intValue];