2009-03-27 24 views
4

私はiPhoneで開発していますが、NSMutableArrayにオブジェクトを格納する方法がありません。何が間違っているのですか?NSMutableArrayにオブジェクトを格納する際の問題

コードの関連セクションは、私はNSObjectのから直接継承する定義されたオブジェクト、エンティティを有する

あります。 GLView.h

@interface GLView : UIView 
{ 
    BOOL controllerSetup; 

    // Entity etc - first development task it to get one up 
    NSMutableArray *arrEntities; 
} 
@property(nonatomic, assign) NSMutableArray *arrEntities; 

そうとdrawView機能では、体内の - - タイマーイベントで複数回呼び出される - 私のクラスでは、私はこれらの配列を定義したいGLView私がのために、配列を割り当てると、初期の開発、ただ1つのエンティティオブジェクトと

- (void)drawView 
{ 
    if(!controllerSetup) { // initialize on first call 
     [controller setupView:self]; 
     controllerSetup = YES; 

     arrEntities = [NSMutableArray array]; 

     Entity* thisEntity = [[Entity alloc] initEntity]; 
     [arrEntities addObject:thisEntity]; 
    } 
    Entity *entity = [arrEntities objectAtIndex:0]; 
    [entity tickEntity:0.1]; 
} 

私の理解では、drawViewの最初の呼び出しにNSMutableArrayのが設定されるだろうということでした配列に追加し、エンティティのインスタンスは、体内で、その後、それに追加配列に格納されたエンティティの最初のコピーへのポインタが取得され、これが操作されます(明らかに、 ater)。

しかし、プロシージャの最初の呼び出しですべて正常に動作すると、objectAtIndexはエンティティポインタを取得し、すべて動作します。しかし、controllerSetupがtrueで初期化節が実行されなかったときの第2の呼び出しでは、arrEntitiesは空であり、objectAtIndexがnilを取得するのでプログラムがクラッシュします。

どうしたのですか?格納されたEntityオブジェクトがNSMutableArrayで保持されないのはなぜですか?あなたが明示的にあなたの配列を割り当てていないので、

- (void)dealloc 
{ 
    [arrEntities release]; 
    [super dealloc]; 
} 

基本的には:そして、deallocメソッドに追加することを確認してください

arrEntities = [[NSMutableArray alloc] init]; 

答えて

8

次でarrEntitiesを作成ラインを交換してみてください(静的+配列メソッドを使用しています)、オートリリースされています。配列が自動解放され、コードがその配列にアクセスしようとすると、プログラムがクラッシュします。

もう一つ:

Entity* thisEntity = [[Entity alloc] initEntity]; 
[arrEntities addObject:thisEntity]; 
[thisEntity release]; // add this 

あなたがthisEntityを放出しない場合は、それがリークします。 addObjectは渡されたオブジェクトを保持します。

-1
Entity* thisEntity = [[Entity alloc] init]; 
[arrEntities addObject:thisEntity]; 
+1

コードをダンプしないでください。あなたは何をしたのか説明する必要があります。これは貧しい答えです。 – arco444

+0

私は次回に覚えています....提案のおかげで... – Mak

関連する問題