Самый элегантный способ, который я знаю, - это использовать базовые данные для локальных данных и прослушивать UITableView уведомления об изменениях из хранилища базовых данных. Это поддерживает разделение модель / вид, и все же вы можете по-настоящему насладиться анимацией удаления строк. Это выглядит так:
- Пользователь говорит удалить строку.
- Ваш код отправляет запрос ASIHTTPRequest и регистрирует селектор для обратного вызова при успешном выполнении запроса.
- Когда это сделано, селектор обратного вызова изменяет модель, которая находится в вашем хранилище базовых данных.
- Это автоматически приводит к тому, что ваш UITableView получает уведомление о том, что строка была удалена, поэтому он может анимировать удаление строки.
Это не дает бонусных баллов, потому что не дает никаких указаний на то, что ячейка будет скоро удалена. Одна вещь, которую я иногда делал, но недостаточно смелая, чтобы попытаться, это оптимистично кодировать вещи в предположении, что вызов веб-службы почти наверняка будет успешным, поэтому продолжайте и удалите строка немедленно, прежде чем ASIHTTPRequest указывает на успех / неудачу; но затем, если это не сработает, откатитесь и сделайте строку заново. Это имеет преимущество в том, что приложение становится намного быстрее в общем случае, когда вызов веб-службы успешен. Базовые данные дают вам несколько способов сделать этот вид «отката», но тем не менее, это определенно становится сложным, поэтому, возможно, оно того не стоит.
Если вы не хотите использовать Core Data, то для меня KVO является вторым лучшим решением.
РЕДАКТИРОВАТЬ: Подумав об этом немного больше, чтобы получить визуальный индикатор того, что строка собирается быть удалена, ваша модель базовых данных может иметь флаг в каждой строке, «помеченный для элемента» или что-то; когда вы запускаете ASIHTTPRequest, вы также изменяете модель, чтобы установить для отмеченногоДля проверки значение true. UITableView будет уведомлен об изменении (потому что он зарегистрирован для уведомлений); поэтому он будет делать любой пользовательский интерфейс в верхней части строки, например, спиннер или что-то, чтобы указать, что это удаляется. Затем, если ASIHTTPRequest завершается успешно, он просто удаляет строку; но если это не удается, он устанавливает флажок "selectedForDeletion" для строк в значение false, что заставляет UITableView отключить счетчик.