Почему я не могу использовать инициализированный массив в приложении с вкладками? - PullRequest
0 голосов
/ 05 января 2012

В приложении с вкладками, разработанном в 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. Но я поставил табличное представление и связал его источник данных и делегата с владельцем файла. Это имеет значение?

1 Ответ

1 голос
/ 05 января 2012

Вы не должны release массив.Удобный метод +arrayWithObjects: возвращает неизвестный массив.Вы никогда не вступали во владение массивом, поэтому вы не должны отказываться от владения.Удалите строку [array release] и вы больше не увидите эту ошибку (по крайней мере, по этой причине).

...