Не удается получить правильный текст объекта UITextField в модальном подклассе UITableViewController - PullRequest
0 голосов
/ 10 декабря 2011

У меня есть подкласс UITableViewController, который я использую, чтобы добавить новые данные для новой ячейки в другой таблице. Это означает, что у меня есть кнопка «Отмена» и кнопка «Сохранить» вверху, чтобы сохранить данные и вернуться к таблице, в которую нужно добавить новый объект. Я показываю добавление контроллера модально.

Моя проблема заключается в том, что я не знаю, как получить данные из ячеек пользовательского ввода tableView в моем подклассе UITableViewController, чтобы сохранить их в моем файле CoreData.

Вот код, как я это пробую - но на консоли я просто получаю (ноль) имя человека:

- (void)save
{

NSLog(@"Saving ...");
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];


UITableViewCell *cell = [self tableView:[self tableView] cellForRowAtIndexPath:indexPath];
NSString *personName = [[cell textField] text];

NSLog(@"New Person: %@", personName);

// Do saving with Core Data and updating here.

[self dismissModalViewControllerAnimated:YES];
}

Я думаю, вам также понадобится следующий метод, чтобы понять проблему:

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

{
static NSString *CellIdentifier = @"Cell";

EditableDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[EditableDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

cell.accessoryType = UITableViewCellAccessoryNone;

if (indexPath.section == 0) {
    [cell.textField setPlaceholder:@"Name"];
} else {
    switch (indexPath.row) {
        case 0:
            [cell.textField setPlaceholder:@"Birth Year"];
            break;
        case 1: 
            [cell.textField setPlaceholder:@"Weight in kg"];
            break;
        case 2:
            [cell.textField setPlaceholder:@"Height in cm"];
            break;
        case 3:
            [cell.textField setPlaceholder:@"Sex"];
            break;
        default:
            break;
    }
}

return cell;
}

Я действительно не могу найти ошибку. В моем понимании это должно работать так ... но это не так. Может ли кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

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

Вместо этого:

UITableViewCell *cell = [self tableView:[self tableView] cellForRowAtIndexPath:indexPath];

Сделайте это:

UITableViewCell *cell = [[self tableView] cellForRowAtIndexPath:indexPath];

Делая это так, как вы делаете, вы по сути воссоздаете ячейку и теряете то значение, которое у вас есть.поступил.Метод источника данных предназначен только для вызова таблицей для определения того, что отображать.

0 голосов
/ 10 декабря 2011

В вашем методе для установки текста ячейки вы изменяете textField ячейки, но строка, которую вы выбираете для регистрации / сохранения в Core Data, взята из textLabel. Это преднамеренное расхождение?

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