Задать вопрос
JohnZoidberg
@JohnZoidberg

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

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

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

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

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

Похожие вопросы