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];
あなたの配列は、自動解放されます。
マイク
ありがとうございました。私はObjective Cの保持/解放メモリ管理の面で本当に苦労しています。あなたの自動車がリリースされた時期とそうでない時期をどうお知りになりますか? :-s – hydev
ちょっと@hydev、基本的にメソッドが "alloc"または "new"で始まるか、またはそれらが "copy"を含むとき、返されるオブジェクトはあなたの所有権です(必要でないときに解放しなければならないという意味です)。他のすべてのメソッドは自動解放されたオブジェクトを返します。解放することについて心配する必要はありません。しかし、彼らはあなたの場合のように後で利用できないかもしれません。 Appleのメモリ管理ガイドをよく読んで理解してください。http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/MemoryMgmt/MemoryMgmt.html – sidyll
@sidyll、この問題を解決しました。驚いたことに、xcode 3には何のエラーもスローされませんでした。しかし、ヘッダファイル@property(nonatomic、retain)NSMutableArray * SectionCellLabelsのretainプロパティとしてSectionCellLabelsを宣言しました。それでも私が理解できない価値があるときは、私は残しておく必要があります。あなたは何か考えているなら私に知らせてください。 – Yogesh