Вопросы:
- как организовать возможность смены стиля отображения карт?
- как открывать детализацию определенной карты по получению PUSH-уведомления?
- как минимальными изменениями в коде загружать данные с другого сервера (формат тот же)
- как при этом организовать кеширование для загружаемых данных?
Ответы:
-
Смотря что понимается под стилем? смена стиля в запущенном приложении? Верстка интерфейса в коде позволяет гибко настраивать отображение карточек. Стиль отображения - таблица/коллекция, можно изменять использую различные представления вывода данных - uitableview, uicollectionview. UICollectionView позволяет задавать направления скролла данных коллекции - горизонтальный/вертикальный
-
На пуш уведомления в AppDelegate есть специальный метод (didReceiveRemoteNotification) который позволяет вести обработу пушей. Пуш уведомление должен содержать идентификатор карты для детализации и возможно др доп информацию, как вариант можно сделать, что бы данные пуш уведомления имели схожую структуру с deeplink'ами, поддерживаемыми ссылками приложения. Т.о. если приложение еще не запущенно то при запуске приложения делаем проверку наличия данных пуш и выводим сразу детализацию по карте после запуска приложения и загрузки данных, если приложение уже запущено - то можно вывести пуш сообщение с предложением перейти в детализацию по карте.
-
Обычно логику загрузки данных выносят в отдельный класс-контроллер который отвечает за взаимодействие с сервером и облегчает класс интерфейса/вьюконтроллера. Все названия серверных методов выносят в константы, например постоянную часть пути метода - http://mobile-hr.de02.agima.ru/exam/, конечное название (providers.json) можно задать и в самом методе класса, т.о. если поменялся хост, то мы меняем константу отвечающую за корневой адрес, если же поменялось все - то меняем и адрес хоста и часть андреса в методе загрузки данных. Конечно возможны и другие варианты, но смысл основной такой - использовать надо константы, что бы поменяв в одном месте, др места автоматом подхватились.
Еще как вариант если адрес загрузки у нас один, то хранить данные в info.plist, и читать значения из него.
- Кэширование данных можно сделать несколькими способами - например через Core Data (если данных много с разными сущностями и атрибутами). Или как вариант через NSURLCache.