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

Я должен упустить что-то простое здесь, но это ускользает от меня.После того, как пользователь вводит нового человека в изменяемый массив, я хочу обновить таблицу.Изменяемый массив является источником данных.Я считаю, что моя проблема лежит в пределах cellForRowAtIndexPath.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    TextFieldCell *customCell = (TextFieldCell *)[tableView dequeueReusableCellWithIdentifier:@"TextCellID"];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (indexPath.row == 0) {
        if (customCell == nil) {
            NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"TextFieldCell" owner:nil    options:nil];
            for (id currentObject in nibObjects) {
                if ([currentObject isKindOfClass:[TextFieldCell class]])
                    customCell = (TextFieldCell *)currentObject;
            }
        }
        customCell.nameTextField.delegate = self;
        cell = customCell;
    }

    else {
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

            cell.textLabel.text = [[self.peopleArray objectAtIndex:indexPath.row-1] name];
            NSLog(@"PERSON AT ROW %d = %@", indexPath.row-1, [[self.peopleArray objectAtIndex:indexPath.row-1] name]);
            NSLog(@"peopleArray's Size = %d", [self.peopleArray count]);
        }
    }

    return cell; 
}

Когда я впервые загружаю вид, все замечательно.Вот что печатает:

PERSON AT ROW 0 = Melissa
peopleArray's Size = 2
PERSON AT ROW 1 = Dave
peopleArray's Size = 2

После того, как я добавляю кого-то в этот массив, я получаю это:

PERSON AT ROW 1 = Dave
peopleArray's Size = 3
PERSON AT ROW 2 = Tom
peopleArray's Size = 3

Когда я добавляю второго человека, я получаю:

PERSON AT ROW 2 = Tom
peopleArray's Size = 4
PERSON AT ROW 3 = Ralph
peopleArray's Size = 4

Почему не печатать всех в массиве?Этот шаблон продолжается, и он всегда печатает только двух человек, и это всегда последние два человека.Какого черта я пропускаю?

--- ОБНОВЛЕНО ---

Хорошо.Мои клетки не обновляются должным образом, и я решил, что то, о чем я просил совета, поможет мне.Я думаю, это не было главной проблемой.

Моя проблема в том, что в моих строках не выводится правильная информация.Когда вид сначала загружается, я получаю:

Melissa
Dave

, но после добавления Тома я получаю:

Melissa         Dave
Melissa    or   Dave
Tom             Tom

и после добавления Ральфа я получаю:

Melissa          ?
Tom        or    ?
Tom              Tom
Ralph            Ralph

Что происходит?

Ответы [ 2 ]

1 голос
/ 20 марта 2012

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

1 голос
/ 20 марта 2012

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

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.textLabel.text = [[self.peopleArray objectAtIndex:indexPath.row-1] name];
NSLog(@"PERSON AT ROW %d = %@", indexPath.row-1, [[self.peopleArray objectAtIndex:indexPath.row-1] name]);
NSLog(@"peopleArray's Size = %d", [self.peopleArray count]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...