Почему цикл по ячейкам UITableView работает только для первой строки? - PullRequest
0 голосов
/ 03 августа 2011

Я перебираю все ячейки моего стола.Каждая ячейка содержит UITextField.Я хочу проверить данные в текстовом поле, но я получаю только правильную строку из первой строки таблицы.Все остальные последующие строки возвращают null для своего текста.Есть идеи?

-(IBAction)saveContactToDB:(UIBarButtonItem *)sender
    {
        //TODO  Loop through each row and test the data.
        //      At least one name has to be entered. If this fails a UIAlert is prompted; otherwise, write to DB
        NSLog(@"Attempting to save contact");
        NSInteger contactID;
        for (NSInteger section = 0; section < [_contactInfoTable numberOfSections]; ++section)
        {
            for (NSInteger row = 0; row < [_contactInfoTable numberOfRowsInSection:section]; ++row)
            {
                ContactFieldCell *cell = (ContactFieldCell *)[_contactInfoTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:section
                                                                                                                         inSection:row]];
                NSLog(@"%@", cell.cellTextField.text);
                NSLog(@"%@", cell.cellTextField.placeholder);

                //Make sure at least one name is entered
                //When i = 0 && j = 0 it means we are on the first row of the name section
                if (section == 0 && row ==0 && cell.cellTextField.text == @"")
                {
                    NSLog(@"Name is required");
                    //Present alert
                    goto ALERTSHOWN;
                }
                else
                {
                    //Write the data to the DB in its respective place
                    if (section == 0)
                    {
                        //Names
                        contactID = [APP.localDatabase saveContactName:cell.cellTextField.text];
                    }
                    else if (section == 1)
                    {
                        //Position
                        [APP.localDatabase saveContactInfoValue:cell.cellTextField.text
                                                       WithType:POSITION
                                                     ForContact:contactID
                                                        AtOrder:row];
                    }
                    else if (section == 2)
                    {
                        //Schedule
                        [APP.localDatabase saveContactInfoValue:cell.cellTextField.text
                                                       WithType:SCHEDULE
                                                     ForContact:contactID
                                                        AtOrder:row];
                    }
                    else if (section == 3)
                    {
                        //Phone number
                        [APP.localDatabase saveContactInfoValue:cell.cellTextField.text
                                                       WithType:PHONE
                                                     ForContact:contactID
                                                         AtOrder:row];
                    }
                    else if (section == 4)
                    {
                        //Miscellaneous
                        [APP.localDatabase saveContactInfoValue:cell.cellTextField.text
                                                       WithType:MISCELLANEOUS
                                                     ForContact:contactID
                                                         AtOrder:row];
                    }
                }
            }
        }
        [self.view removeFromSuperview];
        ALERTSHOWN:;
    }

1 Ответ

1 голос
/ 03 августа 2011

Получив ячейку методом cellForRowAtIndexPath , вы передаете в виде строки переменную section , а в качестве section - переменную row .Должно быть:

ContactFieldCell *cell = (ContactFieldCell *)[_contactInfoTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]];
...