2011-12-19 6 views
1

NSMutableArrayを使用してビューコントローラを初期化しています。しかしinitでは、NSMutableArrayで初期化する必要がありますが、それ以降はすべての要素が消えてしまいます。コピー後にNSMutableArrayのすべての要素が消えます。

UIViewController* vc = [[[PhotoAlbumViewController alloc] initWithImages:imageArrayBig] autorelease]; 

以下は、上記の機能の定義です。

// This is the definition of the init function 
- (id)initWithImages:(NSMutableArray *)bigImages { 

    if ((self = [self initWithNibName:nil bundle:nil])) { 
     _imageArrayBig = [[NSMutableArray alloc] init]; 
     for (ArrayObject* tmp in bigImages) { 
      [_imageArrayBig addObject: tmp]; 
     } 
    } 
    // After the copying, all the elements in bigImages and _imageArrayBig disappear :(
    return self; 
} 

メモリリークはありますか?

+0

私はあなたたちを混乱させて申し訳ありません。実際には2つのコードに分かれています。 –

答えて

2

imageArrayBig_imageArrayBigの両方を使用しているため、プロパティ名とインスタンス名が混在しているようです。

あなたがまた

NSMutableArray* tmp = [[NSMutableArray alloc] init]; 
[tmp addObjectsFromArray:bigImages]; 
self.imageArrayBig = tmp; 
[tmp release]; 
よう addObjectsFromArray

何か

+0

私はプロパティを作成せず、imageArrayBigを合成しませんでした。 _imageArrayBigは単にオブジェクトクラスのプライベート変数です。それは本当にプロパティを作成し、それを合成する必要がありますか? –

+0

実際、以前はaddObjectsFromArrayを試しましたが失敗しました。とにかく、私はあなたのコードを後で再試行します。 –

+0

私はあなたが言ったように関数を実装しました。しかし、私は "NSLog(@" [debug]%@ "、[self.imageArrayBig count]);を実行すると"プログラム受信シグナル:EXC_BAD_ACCESS " –

0

あなたが投稿したコードを使用することにより、より効果的に配列をコピーすることができますプロパティ

である好ましくself.imageArrayBig、1に固執する方が良いです@endersが示唆するように最適化することができます。あなたは財産を必要としません。 initに渡すときにbigImagesにオブジェクトがあることは確かですか? NSLogを追加して確認してください。

- (id)initWithImages:(NSMutableArray *)bigImages { 
    self = [self initWithNibName:nil bundle:nil]; 
    if (self) { 
     NSLog(@"MyController:initWithImages: bigImages count = %d", [bigImages count]); 
     _imageArrayBig = [[NSMutableArray alloc] initWithArray:bigImages]; 
    } 
    return self; 
} 

なぜ可変配列を渡す必要があるのか​​明確ではありません。新しい可変配列を作成する場合は、NSArrayを渡すことができます。

+0

渡されるオブジェクトはもともと可変配列です。はい、私は、NSLogのbigImages内にオブジェクトがあることを確認します。 "NSLog(@" [debug]%@ "、[_imageArrayBig count]);"を実行すると、 "プログラム受信信号:EXC_BAD_ACCESS" initの後に。だからイライラする。 –

+0

NSMutableArrayをNSArrayをとるメソッドに渡すことができます。 'initWithImages'メソッドは渡された配列を変更可能にする必要がないので、ここで行うべきです。それはあなたのクラッシュではありません。あなたのNSLogは間違っています。整数argには%dを指定する必要があります。 %@はオブジェクトに置き換えられます。 – XJones

+0

ああ!愚かな間違い... –

関連する問題