2012-01-05 6 views
0

Xcode 4.2で開発されたタブ付きアプリケーションでは、混乱する問題を発見しました。タブの1つでは、インデックスのようなものを表示するためのテーブルビューがあります。そこで私はviewDidLoad()メソッドで配列を初期化しました。例えば:タブ付きアプリケーションで初期化配列を使用できないのはなぜですか?

- (void)viewDidLoad 
{ 
    NSArray *array = [NSArray arrayWithObjects:@"abc", @"def", @"ghi", @"jkl", @"mno",  nil];  
    self.arrayList = array; 
    [array release]; 

    [super viewDidLoad]; 
} 

その後、私は他の方法でこのArrayListのを使用します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [arrayList count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.textLabel.text = [arrayList objectAtIndex:indexPath.row]; 
    return cell; 
} 

しかし、Xcodeは私に、私はそれを実行するたびに "EXC_BAD_ACCESS" 信号を与えます。いくつかのブレークポイントを設定し、配列がviewDidLoad()で正常に作成されたことを確認しましたが、cellForRowAtIndexPath:(NSIndexPath *)indexPathメソッドを実行する前に、解放されたオブジェクトになりました。それが私がそのシグナルを得て、アプリケーションがクラッシュした理由です。だから、どのようにこの問題を解決するには?

Btw、問題が発生するビューコントローラは、UITableViewControllerではなくUIViewControllerから作成されます。しかし、私はテーブルビューを作成し、そのデータソースとデリゲートをFile's Ownerにリンクしました。それは重要ですか?

答えて

1

アレイをreleaseにする必要はありません。 +arrayWithObjects:簡易メソッドは、所有されていない配列を返します。あなたは決して配列の所有権を取らなかったので、あなたは所有権を放棄してはいけません。行[array release]を削除しても、このエラーはもう表示されません(少なくともその理由はありません)。

関連する問題