2011-02-06 22 views
2

NSArrayを使用してUITableViewを生成する際に問題があります。私は何かをやっていると確信していますが、私はそれを理解できません。私が試して単純なカウントを行うと、EXC_BAD_ACCESSが得られます。これは、存在しないメモリ位置から読み取ろうとしているためです。NSArrayが原因でEXC_BAD_ACCESSが発生する

私の.hファイルがこれを持っている:

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 
NSLog(@"AnalysisViewController:viewWillAppear"); 

// Step 1 - Create the labels array 
SectionCellLabels = [NSArray arrayWithObjects:@"analysis 1", 
        @"analysis 2", 
        @"analysis 3", nil]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSLog(@"AnalysisViewController:cellForRowAtIndexPath"); 

// Check for reusable cell first, use that if it exists 
UITableViewCell *cell = [tableView  
       dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 

// If there is no reusable cell of this type, create a new one 
if (!cell) { 
    cell = [[[UITableViewCell alloc] 
      initWithStyle:UITableViewCellStyleDefault 
      reuseIdentifier:@"UITableViewCell"] autorelease]; 
} 

    /******* The line of code below causes the EXC_BAD_ACCESS error *********/ 
NSLog(@"%d",[SectionCellLabels count]); 

return cell; 
} 

大歓迎任意のヘルプ:

@interface AnalysisViewController : UITableViewController 
{ 
StatsData *statsData; 
NSArray *SectionCellLabels; 
} 

私.Mはこれを持っています。それはもう、おそらくアクセス可能ではない方法の終わりになるよう

SectionCellLabels = [NSArray arrayWithObjects:@"analysis 1", 
        @"analysis 2", 
        @"analysis 3", nil]; 

あなたの配列は、自動解放されます。

マイク

答えて

8

を試してみてください。

SectionCellLabels = [[NSArray arrayWithObjects:..., nil] retain]; 

をそして、あなたのdealloc方法のように、別の場所での配列をreleaseしてください:

は、単純にこのよう retainメッセージを追加し、これを修正するには。

追加のヒントが1つあります。最初の文字を小文字で使用すると、クラスと見なされないことがあります。この混乱したStackOverflowの強調表示に気付くことさえあります。

+0

ありがとうございました。私はObjective Cの保持/解放メモリ管理の面で本当に苦労しています。あなたの自動車がリリースされた時期とそうでない時期をどうお知りになりますか? :-s – hydev

+1

ちょっと@hydev、基本的にメソッドが "alloc"または "new"で始まるか、またはそれらが "copy"を含むとき、返されるオブジェクトはあなたの所有権です(必要でないときに解放しなければならないという意味です)。他のすべてのメソッドは自動解放されたオブジェクトを返します。解放することについて心配する必要はありません。しかし、彼らはあなたの場合のように後で利用できないかもしれません。 Appleのメモリ管理ガイドをよく読んで理解してください。http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html – sidyll

+0

@sidyll、この問題を解決しました。驚いたことに、xcode 3には何のエラーもスローされませんでした。しかし、ヘッダファイル@property(nonatomic、retain)NSMutableArray * SectionCellLabelsのretainプロパティとしてSectionCellLabelsを宣言しました。それでも私が理解できない価値があるときは、私は残しておく必要があります。あなたは何か考えているなら私に知らせてください。 – Yogesh

1

問題はここにある。この

SectionCellLabels = [[NSArray arrayWithObjects:@"analysis 1", 
        @"analysis 2", 
        @"analysis 3", nil] retain]; 
関連する問題