次の手順を実行すると、EXEC_BAD_ACCESS が発生します。
ステップ 1: メイン メニューから [スコア] ボタンをクリックします。 これにより、メニュー (UIView) が削除され、スコア (UIView) が読み込まれ、UITableView に値を設定するプロセスが開始されます。ここでは問題ありません。
self.viewController4 = [[ScoresViewController alloc] initWithNibName:@"ScoresViewController" bundle:nil];
[window addSubview:viewController4.view];
[viewController.view removeFromSuperview];
NSLog(@"LOADING SCORES SCREEN");
ステップ 2: スコア画面から「メニュー」ボタンをクリックします。 これにより、スコア (UIView) が削除され、メニュー (UIView) が再度読み込まれます。ここでは問題ありません。
self.viewController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuViewController" bundle:nil];
[window addSubview:viewController.view];
[viewController4.view removeFromSuperview];
NSLog(@"Loading MAIN MENU");
ステップ 3: メイン メニューから [スコア] ボタンを再度クリックします。 これにより、メニュー (UIView) が削除され、スコア (UIView) が読み込まれ、UITableView に値を入力するプロセスが開始されます。問題あり!
スコア画面 (UIView) を表示する前にアプリケーションがクラッシュします。デバッガーを使用して、問題を 1 行のコードに突き止めました。cell.text = [self->theScoresArray objectAtIndex:indexPath.row]; 以下のルーチンに表示されます。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [theTable dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
cell.text = [self->theScoresArray objectAtIndex:indexPath.row];
return cell;
}
これは、indexPath オブジェクトが最初に適切に解放されないという問題でしょうか? どんな洞察も役に立ちます。貴重な時間をありがとう。