Добавление дополнительной ячейки в начало проблем UITableView - PullRequest
1 голос
/ 08 января 2012

Я прочитал несколько SO-сообщений по этой проблеме, но, похоже, у них есть проблемы (конечно же, прическа), добавляющая дополнительную ячейку в верхнюю часть UITableView.Вот мой код:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // self.StringArray has 5 string objects inside
    return ([self.stringArray count] + 1);
}

- (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];
    }

    // create hardcoded first row in table
    if([indexPath row] == 0)
    {
        cell.textLabel.text = @"Select me";
    }
    else
    {
        // decrement the row to get the correct object from the self.stringArray
        int arrayIndex = [indexPath row] - 1;
        cell.textLabel.text = [self.stringArray objectAtIndex:arrayIndex];
    }
    return cell;
}

Все выглядит хорошо (очевидно, что-то не так, хотя, если я получаю сообщение об ошибке исключения), но я не могу это заметить.

Исключение:* Завершение работы приложения из-за невыполненной исключительной ситуации 'NSRangeException', причина: '* - [__ NSArrayM objectAtIndex:]: индекс 5 за пределами [0 .. 4]'

1 Ответ

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

Я нашел проблему.Я упустил из виду тот факт, что я не учел другие методы делегата UITableView, и я не учел эту дополнительную строку в UITableView при настройке логики для метода tableView: canEditRowAtIndexPath.Вот код, который решил проблему:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // I added code here to intercept the added row (row 0) and make it non-editable
    if([indexPath row] == 0)
    {
        return NO;
    }
    else
    {
        // decrement the row to get the correct object from the self.stringArray    
        int arrayIndex = [indexPath row] - 1;
        if([[self.stringArray objectAtIndex:arrayIndex] length] > 10)
        {
            return YES;
        }
        else
        {
            return NO;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...