2012-07-13 50 views
0

正如人們所期望的,我是Objective-C和Cocoa2d的新手,所以這可能會很痛苦,但我似乎無法讓它以一種合理的方式工作。如何在Objective-C中從類傳遞數組到類?

我想要做的就是讓10名成員的數組(更多將在以後添加)全爲[0,1,2,3]整數的,後來我想被用於這些號碼級別選擇屏幕,其中0表示電平被鎖定(未完成),並且數字> 0表示恆星數量(三分之一)並且表示電平已完成,在電平結束時我想將數組更改爲反映該級別已完成。出於測試目的,我充滿了陣列「隨機整數」(0-3)這樣(在LevelSelection.m):

NSMutableArray *LevelCompArray = [NSMutableArray arrayWithCapacity:10]; 
     for(int i = 0; i<10; i++){ 
      int x= (arc4random() % (4)); 
      [LevelCompArray addObject:[NSNumber numberWithInteger:x]]; 
     } 

我沒有alloced也不初始化數組,但它似乎函數本身-(id) init內的工作,雖然我相信這是我的問題的根源。

我的問題很簡單,我怎麼從類調用這個陣列(和其他數據我將創建爲我的遊戲進程)類(例如,從LevelSelection.mLevelCompleted.m)和功能函數(例如-(id) init-(void) launchLevel)。我是否擁有所有必需類都可以訪問的數據集中文件?如果是這種情況,所有關於「.plist」的討論都是如此?如果不是,我是否通過方法將數據傳輸到目標類/方法?我怎麼做?

任何幫助深表感謝,轉移到教程也將非常有用。

回答

2

一種方式做這將是,如你所說,有一大堆的全局變量在一個文件中,每個人都#import秒。你不會使用.plist文件;相反,它只是一個.m像所有其他源代碼一樣。

您也可以將信息傳遞給任何需要它的對象的構造函數。例如,您可以執行類似[[LevelSelection alloc] initWithCompletionArray:LevelCompArray]的操作。然後,爲了確保每個對象在所述數組中都有正確的信息,請使用通知。

-(id) initWithStuff:(Stuff *s) { 
    if(self = [super init]) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(doStuff:) 
                name:@"LEVEL_COMPLETED" 
                object:anObject]; 
    } 

然後在doStuff:(這需要一個NSNotification*),你有一定的邏輯來處理無論發生什麼,使用通知的對象。

2

you shoukld使用數組的屬性。這樣的: 首先你需要在secondviewcontroller.h創建陣列,像這樣:

NSMutableArray *LevelCompArray; 
    @property (nonatomic, retain) NSMutableArray *LevelCompArray; 

然後合成它在secondviewcontroller.m:

@synthesize LevelCompArray; 

然後,例如,你想在觸摸FirstViewController中的按鈕時傳遞Array。在它的作用,你可以將它設置讓你的第二個視圖控制器的情況下,這樣的:

secondViewController.LevelCompArray = someArray; 

實際上它是視圖控制器之間的數據傳遞,更多信息請檢查此鏈接: Passing Data between View Controllers

希望這個幫助。

+0

是的,感謝您的輸入! – nico 2012-07-13 21:02:03

+1

你不需要第一行「NSMutableArray * LevelCompArray;」在你的第一個代碼示例中。 – 2012-07-13 21:02:25

相關問題