UITextView в UITableViewCell - проблема с тегами - PullRequest
0 голосов
/ 02 сентября 2011

у меня есть сгруппированное табличное представление с текстовыми полями в UITableViewCells.

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

}


if(indexPath.section < 6) {
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)];
    textField.tag = indexPath.section + 22;
    textField.delegate = self;
    [cell.contentView addSubview:textField];
    [textField release];
}
return cell;
}

Поэтому, когда я нажимаю кнопку Сохранить, вызывается метод saveItem:

- (void)saveItem {
    NSMutableArray *textFieldArray = [[NSMutableArray alloc] init];
    for (int i = 0; i <6; i++) {
        [textFieldArray addObject:(UITextField *)[self.view viewWithTag:22+i]];
    }
...
}

Я могу без проблем изменить значения первых 4 текстовых полей. они также сохраняются, но когда я изменяю значение в 5-м или 6-м текстовом поле, мое приложение вылетает, и я получаю сообщение об ошибке:

* Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '* - [NSMutableArray insertObject: atIndex:]: попытка вставить нулевой объект в 0'

Есть предложения?

Спасибо, пока.

Ответы [ 4 ]

0 голосов
/ 05 сентября 2011

Кроме того, вы не должны создавать текстовое поле в вашем cellForRowAtIndexPath.Вы должны создать его в ваших init или viewDidLoad методах.

0 голосов
/ 02 сентября 2011

1. Что бы вы ни пытались получить к этому объекту?он выделяет память только для того, что вы можете видеть.

3.после прокрутки таблицы и просмотра 6-го раздела, затем нажмите кнопку сохранения, приложение не будет аварийно завершено.

0 голосов
/ 02 сентября 2011

Просто нужно изменить свой код

if(indexPath.section <= 6) {     
     UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)];     
     textField.tag = indexPath.section + 22;     
     textField.delegate = self;     
     [cell.contentView addSubview:textField];     
     [textField release]; 
}
0 голосов
/ 02 сентября 2011

Я думаю, что проблема в том, что не все разделы отображаются при нажатии Кнопка сохранения . Поэтому, когда вы пытаетесь получить доступ к view с тегами 5 и 6, они равны нулю, поскольку они не отображаются и поэтому не были добавлены (или были удалены) из вашего представления.

Чтобы проверить это, просто попробуйте прокрутить до нижней части вашего tableView и попробуйте нажать Сохранить кнопку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...