2016-08-17 2 views
1

У меня есть tableView, где я показываю 0bjects, которые я создаю в другом классе. Объекты хранятся в массиве.Удалить строки и разделы с commitEditingStyle

var whiskyArray = [WhiskyBuilder]() 

Из wiskyArray Я создаю словарь для перемещения данных в таблицуView. Словарь составлен с первой буквой как ключ и именами объектов в качестве значения:

var alphabetizedWhiskies = [String: [WhiskyBuilder]]() 

Теперь я хотел бы, чтобы удалить клетки с commitEditingStyle: из Tableview, что я делаю со следующим методом:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 

    if editingStyle == UITableViewCellEditingStyle.Delete { 

     alphabetizedWhiskies[Array(alphabetizedWhiskies.keys.sort())[indexPath.section]]!.removeAtIndex(indexPath.row) 

     if alphabetizedWhiskies[Array(alphabetizedWhiskies.keys.sort())[indexPath.section]]!.count == 0 { 

    alphabetizedWhiskies.removeValueForKey(Array(alphabetizedWhiskies.keys.sort())[indexPath.section]) 

    tableView.deleteSections(NSIndexSet(index:indexPath.section), withRowAnimation: .Fade) 

     }else { 

      tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

      alphabetizedWhiskies.removeValueForKey(Array(alphabetizedWhiskies.keys.sort())[indexPath.row]) 

     } 
} 

Этот метод действительно идеален, ячейки удалены. Но каждый раз, когда я возвращаюсь к этому представлению, удаленные ячейки снова возвращаются в таблицу. Я новичок в swift, но я думаю, что это происходит, потому что ячейки удаляются в словаре, но объекты в whiskyArray не являются. Я пытался удалить объекты в whiskyArray:

whiskyArray.removeAtIndex(indexPath.row) 

Но с этим, любой объект в whiskyArray удаляется, но не тот, который я хотел бы удалить. Итак, как мне получить нужный объект для удаления в whiskyArray, удалив ячейку в tableView. Я нашел много об удалении tableViewCells, но я не знаю, как удалить объект значения в массиве. Кто-нибудь может мне помочь?

ответ

0

Вам необходимо убедиться, что он фактически удаляется из данных. Когда вы удаляете его из массива, это просто локальная копия, и когда вы покидаете представление и возвращаетесь, я предполагаю, что вы перезагружаете данные в массив, по сути, начинаете все заново. Это не имеет никакого отношения к вашему коду UITableView.

0

Хорошо ... У вас есть несколько вопросов здесь из того, что я могу сказать.

Первое, какое бы значение вы используете в

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return ??????????? 
} 

не изменяется при удалении, что вы удалить. Причина, по которой строка исчезает, состоит в том, что вы вручную удалили строку, а затем, когда вы перезагрузите представление tableView.reloadData().

Я бы не использовал эти линии.

tableView.deleteSections(NSIndexSet(index:indexPath.section), withRowAnimation: .Fade) tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

Тот факт, что эта функция работает означает, что Tableview уже планирует на удаление соответствующего indexPath ... если вы действительно хотите удалить больше, чем просто, что indexPath.

Далее ... каждый раз, когда диспетчер представлений отклоняется (что происходит при возврате к предыдущему виду или с использованием Show Show Segue и других условий), вы потеряете статус viewController, а viewDidLoad начнет вас с квадрата один, если вы не храните информацию в постоянном хранилище, таком как Core Data.

Следующее, что вы используете функции сортировки. Поскольку вы используете их, вы должны убедиться, что информация в whiskyArray сортируется одинаково, или удаленный объект будет казаться случайным.

Смежные вопросы