Если пользователь iOS активно добавляет данные в представление, каков наилучший способ получить их с сервера?
Я создал быстрое приложение, которое перечисляет отели и комнаты. Я создал бэкэнд с Rails и postgresql, и я поднял его на heroku. Я использую JSON для передачи информации туда и обратно между моим внешним интерфейсом iOS.
Вот что мне интересно. Допустим, у вас есть TableViewController с UIBarButtonItem для добавления новых элементов. Новый элемент добавлен, и представление должно обновиться.
Как ты это делаешь? Прямо сейчас мое приложение снова получает с сервера, что кажется глупым.
У меня уже может быть 50 пунктов в списке. Если я добавлю новый элемент, сервер снова нажмет, чтобы получить 51 элемент.
Какой лучший способ пойти по этому поводу?
1 ответ
Делай две вещи одновременно.
- Отправьте запрос POST, чтобы сделать новый элемент.
- Добавьте элемент в UITableView
Такие как:
self.listings addObject:myObject];
[self.tableView reloadData];
Лучше всего предположить, что данные были успешно отправлены, и показать список в UITableView как можно скорее. Это обеспечит быстрый и плавный опыт. В 95% случаев данные будут отправлены на ваш сервер в порядке. В случае вероятности возникновения ошибки вы можете просто сообщить пользователю, что что-то пошло не так, и дать ему возможность повторить попытку (сохранить его локально, и, если после ошибки он вернется к экрану добавления, предварительно заполните данные).
Другой, более ленивый и худший вариант, заключается в том, что после того, как они нажимают "добавить", вы отображаете индикатор загрузки и ждете ответа сервера, прежде чем добавить его в UITableView и обновить представление таблицы.
Но опять же - данные, которые вы отправляете на сервер, должны быть такими же, как вы отображаете локально *, поэтому просто создайте объект и добавьте его в массив.
Примечание: * Если сервер выполняет большую работу с этими данными, а отправляемое вами сообщение отличается от того, что вы отображаете, ваш сервер должен ответить созданным и созданным объектом. Сериализуйте ответ и добавьте его в UITableView.