2011-04-22 48 views
0

喜IM正在嘗試從一個NSMutableArray特定類的一個對象,然後將其添加到自:如:檢索類對象,並添加到自

- (void) init{ 
    _Objects = [[NSMutableArray alloc]init]; 
    Psychicing *psy = [[Psychicing alloc]init]; 
    [psy startPsychic]; 
    [_Objects addObject: psy]; 
    [psy release]; 
} 

這將創建類Psychicing的對象,然後運行[psy startPsychic]方法來創建類對象的內部。然後我將psy對象添加到_Objects NSMutableArray。

-(void)startPsychic{ 
     id psychicParticle = [CCParticleSystemQuad ......]; //is Synthesised with (assign) 
     //Other things are set here such as position, gravity, speed etc... 
} 

當在屏幕上檢測到觸摸時,我想從_Objects陣列採取PSY對象並將其添加到自:是這樣的(雖然這給出了運行時錯誤)

-(void) Touches.....{ 

    for (Psychicing *psy in _Objects){ 
      [self addChild: psy.psychicParticle]; 
    } 
} 

我希望我已經清楚解釋清楚了,如果你需要更多的澄清讓我知道。
所以基本上:
[MainClass初始化] - > [Psychicing startPsychic] - > [MainClass添加到陣列] - > [MainClass添加到自]

+0

請發表您得到確切的錯誤。 – taskinoor 2011-04-22 05:11:48

+0

在拋出'NSException'實例後終止調用 程序接收到的信號SIGABRT – Ospho 2011-04-22 05:15:20

+0

上面列出的代碼將不會編譯,因爲'Touches ....'方法中引用的_Objects變量未聲明(它僅在本地聲明'init')。我假設'_Objects'是你實際代碼中的一個實例變量 - 你能給我們一個真正的摘錄嗎? – 2011-04-22 05:26:23

回答

1

我假設_Objects(其應該是一個小寫Ô遵循約定)存儲的對象不是Psychicing對象,而是試圖在 - (void)Touches ...方法(它也應該是小寫)中將Psychicing對象從其中拉出來。如果是這樣,你可以這樣做:

for (id obj in _Objects) 
{ 
    if ([obj isMemberOfClass:[Psychicing class]]) 
    [self addChild:obj.psychicParticle]; 
} 

這將導致只有數組中的Psychicing對象添加爲孩子的自我。

它看起來像你有另一個錯誤,但如果你粘貼的代碼是你的真實代碼。 Init應定義爲:

- (void) init{ 
    _Objects = [[NSMutableArray alloc]init]; 
    Psychicing *psy = [[Psychicing alloc]init]; 
    [psy startPsychic]; 
    [_Objects addObject: psy]; 
    [psy release]; 
} 

將_Objects定義爲類接口中的實例變量(或屬性)。正如你寫的那樣,它是init方法中的一個方法變量,並且正在泄漏。因此,當您嘗試訪問受保護的_Objects時,_Objects最有可能爲零。

+0

嘿,對不起,_Objects是一個全局變量而不是一個方法變量。使用你的代碼,我現在有這條線的麻煩: [self addChild:obj.psychicParticle];似乎obj沒有任何名爲psychicParticle的屬性,所以它給了我一個語法錯誤。 – Ospho 2011-04-22 05:37:13

+0

心理準備有一個psychicParticle屬性嗎?我這樣做只是因爲它就是你用addChild存儲的內容:在問題中。如果您嘗試存儲Psychicing對象,只需[self addChild:obj]; – McCygnus 2011-04-22 07:34:02

0

好,與McCygnus的幫助下,我得到它的工作,唯一的指針對象的ID丟失:

for (id obj in _Objects){ 
     if ([obj isMemberOfClass:[Psychicing class]]){ 
      Psychicing *apsy = obj; 
      [apsy.psychicParticle setPosition:location]; 
      [self addChild:apsy.psychicParticle]; 
     } 

    }