Xcode 4.3 と SDK 5.1 で単純な UITableView を作成しようとしています。古い SDK では、次のエラーを受け取っていないので、Profiler と NSZombie をチェックしても何が起こっているのか少し混乱しています。
私の.hファイルで
NSMutableArray *fruits;
私の.mファイルで
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
fruits = [[NSMutableArray alloc] init];
[fruits addObject:@"Apples"];
[fruits addObject:@"Bananas"];
[fruits addObject:@"Oranges"];
[fruits addObject:@"Kiwi Fruit"];
}
- (void)dealloc
{
[fruits release];
[super dealloc];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"%d", [fruits count]);
return [fruits count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"FruitsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
NSString *title = [fruits objectAtIndex:indexPath.row];
cell.textLabel.text = title;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *selectedOption = [fruits objectAtIndex:indexPath.row];
NSLog(@"%@", selectedOption);
}
果物を選択するたびに EXC_BAD_ERROR が発生し、出力に「tableView:didSelectRowAtIndexPath:]: 割り当て解除されたインスタンスに送信されたメッセージ」と表示されます
ARC を簡単に見て、これはメモリ管理の問題である可能性があると考えたので、dealloc を削除しましたが、それでも例外がスローされます。この単純な例には何が欠けていますか?!