Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

iOS-разработчики, стремящиеся выполнять это требование безопасности, часто совершают одну ошибку. Они пытаются устанавливать в YES или NO значение свойства hidden экземпляра keyWindow. Даже хотя окно keyWindow экземпляра приложения будет валидным окном в момент, когда приложение становится неактивным, в момент «оживления» приложения keyWindow равно nil — то есть указывает в никуда. Следовательно, во избежание возможных ошибок просто пользуйтесь свойством window делегата приложения, отображая или скрывая окно.

Другая проблема, касающаяся безопасности приложения, связана с «оседанием» персональных данных в контроллерах видов. Предположим, у вас есть контроллер вида для входа в систему. Здесь пользователь

вводит свои имя и пароль. Как только будет нажата кнопка, которая зачастую называется Login (Вход в систему), вы отправляете учетные данные пользователя на сервер по сетевому HTTPS-соединению. Когда произойдет аутентификация пользователя, вы выдвигаете на экран другой контроллер вида. Проблема, связанная с таким подходом, заключается в том, что имя и пароль, введенные пользователем на предыдущем экране, по-прежнему остаются в памяти (как и сам контроллер вида). Как вы помните, навигационный контроллер включает целый стек контроллеров видов.

Чтобы справиться с этой проблемой и повысить безопасность пользовательского интерфейса, можно присвоить свойству text защищенных текстовых полей значение nil. Это делается в тот самый момент, когда на экран выдвигается второй контроллер вида. Другой способ — переопределить метод экземпляра viewWillDisappear: контроллера вида для входа в систему, а также установить свойство text текстовых полей в nil прямо здесь. Тем не менее такой подход требует известной осторожности, так как упомянутый метод экземпляра контроллера вида вызывается всякий раз, когда контроллер исчезает с экрана — например, когда пользователь покидает вкладку с контроллером вида, уходит на другую вкладку, а потом возвращается на первую. Действительно, при таком переходе контроллер вида успевает и исчезнуть с экрана, и вновь там появиться. Поэтому если пользователь всего лишь перешел на соседнюю вкладку, а вы уже стерли всю информацию, введенную в поля, то при возвращении на первую вкладку пользователь найдет там лишь пустые окошки и будет вынужден заносить всю информацию заново. Разработка всегда ведется в соответствии с поставленными бизнес-требованиями, поэтому не существует однозначного ответа на вопрос о том, как справиться с такой ситуацией.

См. также

Разделы 8.2 и 8.8.

Глава 9. Core Location и карты

9.0. Введение

Фреймворки Core Location и Map Kit можно применять для создания приложений, приспособленных для обработки геолокационной информации (информации о местоположении) и картографических приложений. Фреймворк Core Location использует оборудование устройства для определения актуального местонахождения этого устройства. Фреймворк Map Kit, в свою очередь, позволяет программе отображать для пользователя карты, снабжать карту определенными аннотациями и т. д. С чисто программистской точки зрения доступность геолокационных сервисов зависит от наличия на устройстве необходимого оборудования; если оборудование имеется, то оно должно быть активизировано и подключено для работы с фреймворком Core Location или Map Kit. Устройство с операционной системой iOS, оснащенное службами GPS (системы глобального позиционирования), позволяет работать с технологиями 2G, EDGE, 3G, 4G и другими, которые помогают определять местоположение пользователя. В настоящее время практически на любых устройствах с iOS поддерживаются геолокационные службы, но программисту рекомендуется проверять доступность таких сервисов и приступать к работе с ними, лишь убедившись в их наличии. Ведь мы и в самом деле не можем знать наверняка, не будет ли в будущем Apple выпускать какое-либо устройство, на котором не будет всего оборудования, необходимого для обеспечения геолокационных функций.

В новом компиляторе LLVM, предоставляемом в Xcode для iOS 7, Apple реализовала концепцию модулей. В

более ранних версиях SDK и Xcode для использования фреймворков Core Location и Map Kit требовалось вручную импортировать эти фреймворки в целевой проект. Но с появлением модулей для добавления этих фреймворков требуется всего лишь импортировать их заголовочные файлы в классы проекта, вот так:

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>

И все. Фреймворки Core Location и Map Kit окажутся в ваших проектах.

9.1. Создание картографического вида

Постановка задачи

Необходимо инстанцировать и отобразить карту в экранном виде.

Решение

Создайте экземпляр класса MKMapView, после чего добавьте его к виду либо присвойте подвиду контроллера вашего вида. Вот пример. h-файла такого контроллера вида, в котором создается экземпляр MKMapView, после чего этот вид отображается в полноэкранном режиме:

#import <UIKit/UIKit.h>

#import <MapKit/MapKit.h>

@interface ViewController 

@property (nonatomic, strong) MKMapView *myMapView;

@end

@implementation ViewController

Это обычный корневой контроллер вида, содержащий переменную MKMapView. В следующем коде в реализации данного контроллера вида (.m-файле) мы инициализируем карту и зададим для нее тип Satellite:

— (void)viewDidLoad{

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

self.myMapView = [[MKMapView alloc]

initWithFrame: self.view.bounds];

/* Задаем Satellite в качестве типа карты. */

self.myMapView.mapType = MKMapTypeSatellite;

self.myMapView.autoresizingMask =

UIViewAutoresizingFlexibleWidth |

UIViewAutoresizingFlexibleHeight;

/* Добавляем карту к нашему виду. */

[self.view addSubview: self.myMapView];

}

Обсуждение

Создать экземпляр класса MKMapView довольно легко. Можно просто присвоить ему рамку, воспользовавшись его же конструктором, а после того как карта будет создана, добавить ее в качестве подвида к виду, который в настоящий момент отображается на экране. И все, мы сможем просматривать карту.

MKMapView — это подкласс UIView. Таким образом, можно манипулировать любым картографическим видом тем же способом, каким вы работаете с экземпляром UIView. К примеру, мы пользуемся свойством UIView для того, чтобы вставить в вид его свойство backgroundColor.

Вы, наверное, уже заметили, что у класса MKMapView есть свойство под названием mapType, характеризующее тип карты. Карта может быть спутниковой, стандартной или гибридной. В примере мы пользуемся картой спутникового типа (рис. 9.1).

Поделиться:
Популярные книги

Тринадцатый IX

NikL
9. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Тринадцатый IX

Гром над Академией. Часть 1

Машуков Тимур
2. Гром над миром
Фантастика:
фэнтези
боевая фантастика
5.25
рейтинг книги
Гром над Академией. Часть 1

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

Хозяин оков VI

Матисов Павел
6. Хозяин Оков
Фантастика:
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Хозяин оков VI

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Сирийский рубеж

Дорин Михаил
5. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Имя нам Легион. Том 1

Дорничев Дмитрий
1. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 1

Неудержимый. Книга XX

Боярский Андрей
20. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XX

Найденыш

Шмаков Алексей Семенович
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Найденыш

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI

Советник 2

Шмаков Алексей Семенович
7. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Советник 2

Воплощение Похоти 3

Некрасов Игорь
3. Воплощение Похоти
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Воплощение Похоти 3

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2