JohnZoidberg
@JohnZoidberg

Куда поместить код загрузки и парсинга JSON в iOS приложении?

Учусь objective C на простом приложении - выбрать город из списка и показать в новом окне его текущую температуру.
Для каждого окна есть ViewController. Список городов (с кэшем данных по температурам) хранится в plist-файле. Запрос к сервису погоды происходит асинхронно на первом окне (для обновления кэша) и на втором - для получения последних данных по выбранному городу.
Есть идея сделать класс для файла с городами и температурой, с методами доступа к файлу и методами загрузки данных с погодного сервиса.
Но непонятно, как тогда обновлять Label с температурой. Правильно ли будет, чтобы второй вьюконтроллер вызывал метод этого класса, ждал пока тот вернёт значение, и это значение помещал в текст лейбла?
Сейчас второй вьюконтроллер просто сам посылает асинхронных запрос и в обработчике меняет текст лейбла.

Собственно вопрос - куда положить код работы с сервисом погоды?
  • Вопрос задан
  • 2490 просмотров
Решения вопроса 1
@agee
Когда Вы возвращаетесь в главный поток после того, как пришел ответ от сервера, сохраните результаты в Ваш plist и после этого пошлите notification об этом событии. NSNotificationCenter и NSNotification в помощь.
На эту нотификацию могут быть подписаны любые объекты. Так что если сейчас активен viewController, который отображает погоду в конкретном городе, после получения нотификации смело обновляйте данные.

Что касается "куда положить код работы с сервисом погоды". Учитывая, что Ваше приложение по описанию миниатюрное, можете смело этот код "пихать" в viewDidLoad root viewController'а. В противном случае, если хочется обращатья к серверу из разных мест, можно создать отдельный синглтон с простеньким интерфейсом в один метод а-ля
- (void)temperatureListWithCompletion:(void(^)(NSError * error, NSArray *results));
И вызывать его уже откуда душа пожелает. Не стоит, правда, забывать о том, что нет смысла посылать новый запрос, пока не пришел ответ на предыдущий точно такой же.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы