2013-02-02 1 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] intValue]; 

또는, 더 명확하게와

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

를 교체합니다 (그리고, 정말로 C와 목표 - C 튜토리얼을 다시 읽어보십시오.이 사소한.입니다) 작성 됨

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

Arrow 열거 유형을 NSNumberbtn1Clicked:에 저장하므로이 값을 GetItemOneNSNumber *에서 int 값으로 unbox해야합니다.

+0

! 질문을 변경해야 할 수도 있습니다. 어떻게 enum 값을 저장할 수 있습니까? 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-ns와 같은 변경 가능 객체) –

+0

최근 버전의 Xcode (및 LLVM)를 사용하면 다음과 같이 사용할 수있는 새로운 Objective-C NSNumber boxing 구문을 사용할 수 있어야합니다.'[NSMutableArray arrayWithObjects : @ (aLeft), @ (aRight), nil]; ' – mopsled

+0

didnt know 그. @mopsled 감사합니다. –

0

[[self arrowsPkg]objectAtIndex:1]NSNumberArrow 열거 아닌 구성원하지 않습니다. NSNumber 개체를 초기화하는 경우와 마찬가지로 개체와 해당 값을 intValue을 호출하여 변환해야합니다.

+0

빠른 응답을 주셔서 감사합니다. 인덱스로 인스턴스 객체 배열 속성의 값을 가져옵니다. 예 : 0 은 인스턴스 개체의 ArrowsPkg [0]을 의미합니다. 그래서 aLeft.and는 "You Right Arrow Get"을 기록해야하지만 그렇지 않습니다. –

+0

@ N.Ramos 그리고 당신은 그 일을 어떻게 막을 수 있습니까? –

+0

인덱스로 인스턴스 객체의 배열 속성 값을 가져오고 싶습니다. 0은 인스턴스 객체의 ArrowsPkg [0]을 의미합니다. 그래서 그것은 aLeft.and "당신은 왼쪽 화살표"를 기록해야하지만 그것은하지 않습니다. –