2013-02-02 50 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它應該記錄「你得到左箭頭」,但它不。 –