В приложении с вкладками, разработанном в Xcode 4.2, я обнаружил непонятную проблему: на одной из вкладок есть табличное представление, показывающее что-то вроде индекса. Поэтому я инициализировал массив в методе 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 он стал освобожденным объектом. Вот почему я получил этот сигнал, и приложение упало. Итак, как решить эту проблему?
Кстати, контроллер представления, в котором возникает проблема, создается из UIViewController, а не UITableViewController. Но я поставил табличное представление и связал его источник данных и делегата с владельцем файла. Это имеет значение?