Удалить объект из массива в NSTableView
-
06-07-2019 - |
Вопрос
Быстрый. Я что-то пропускаю ...
У меня есть сгруппированное табличное представление, которое построено из массивов в NSDictionary. Каждый массив является разделом таблицы. Находясь в режиме редактирования, пользователь нажимает кнопку «удалить». Я звоню
- (void)removeObject:(MyClass *)myObject
как я могу определить, какой массив отправить сообщение [myArray removeObject: myObject]? NSDictionary не имеет indexOfObject: метод, но NSArray есть. Я полагаю, что мог бы перебирать каждый массив в поисках указанного объекта, но это не так.
Может кто-нибудь погреметь мне, пожалуйста?!? ТНХ!
Решение
Вы можете реализовать стандартные протоколы UITableView и использовать этот метод:
(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle<br> forRowAtIndexPath:(NSIndexPath *)indexPath {
<br><br>//check the section according to your array, if(indexPath.section ==....
<br><br>
if(editingStyle == UITableViewCellEditingStyleDelete) {
<br>
[arrayFoundBefore removeObjectAtIndex:indexPath.row];
<br>
}
<br>}
Я думаю, что это способ сделать это, хотя и не уверен. Кто-нибудь может уточнить?
Другие советы
Вы должны знать, какой tableView отправил сообщение (потому что рассматриваемый метод находится в делегате для этого объекта), и поэтому вы можете либо создать массив в методе viewDidLoad в делегате tableView, либо альтернативно выяснить, какой из них основан на контексте делегата.
Я не вижу ничего явно неправильного в итерациях по массивам. Как часто люди удаляют вещи, и достаточно ли велики словари, чтобы сделать это значительными накладными расходами?
В качестве контрольной точки метод NSArray indexOfObject:
не делает ничего более сложного, чем итерация, хотя массив ищет соответствующий объект.