Читать «iOS. Приемы программирования» онлайн - страница 444
Вандад Нахавандипур
Для чтения этого раздела необходимо внимательно проработать раздел 19.8 и подготовить в Xcode проект для iOS, обладающий корректным профилем инициализации. Это нужно для доступа к вашим талонам, расположенным в пользовательской библиотеке Passbook.
Apple предоставила для iOS-разработчиков фреймворк PassKit.framework. Этот фреймворк позволяет взаимодействовать с талонами, которые пользователь установил на своем устройстве (устройствах). Чтобы можно было использовать этот фреймворк с применением новейшего компилятора LLVM, вам всего лишь потребуется импортировать в проект соответствующий обобщающий заголовок, вот так:
#import «AppDelegate.h»
#import <PassKit/PassKit.h>
<# Остаток вашего кода находится здесь #>
Далее потребуется объявить закрытое свойство типа PKPassLibrary в файле реализации делегата нашего приложения. Вышеупомянутый класс из фреймворка PassKit.framework позволяет взаимодействовать с талонами, добавленными на устройство. Для считывания значений, таких как номер платформы, с которой отправляется поезд, и город отправления, вам также нужно знать ключи из файла pass.json, который вы создали в разделе 19.2. Итак, объявим и эти ключи, тоже в файле реализации делегата приложения:
#import «AppDelegate.h»
#import <PassKit/PassKit.h>
@interface AppDelegate ()
@property (nonatomic, strong) PKPassLibrary *passLibrary;
@end
NSString *PassIdentifier = @"pass.pixolity.testingpasskit";
NSString *PassSerialNumber = @"p69f2J";
NSString *DepartureKey = @"departure";
NSString *DeparturePlatformKey = @"departurePlatform";
NSString *Arrival = @"arrival";
NSString *ArrivalPlatform = @"arrivalPlatform";
@implementation AppDelegate
<# Остаток вашего кода находится здесь #>
Великолепно! Написав этот код, вы теоретически получаете возможность доступа к библиотеке Passbook, расположенной на устройстве. Но погодите: а что делать, если на устройстве не установлена эта библиотека? Сначала нужно проверить, имеется ли библиотека Passbook на устройстве. Для этого используется метод класса isPassLibraryAvailable, относящийся к классу PKPassLibrary.
Далее нужно инстанцировать свойство passLibrary типа PKPassLibrary, а потом воспользоваться относящимся к библиотеке талонов методом экземпляра passWithPassTypeIdentifier: serialNumber:, чтобы найти искомый талон. Вот теперь понятно, почему среди различных ключей, относящихся к талону, мы, в частности, определяли идентификатор талона и его серийный номер. Вышеупомянутый метод вернет объект типа PKPass, который будет соответствовать вашему талону. Имея объект талона, вы можете считывать значения его ключей различными способами.
Ключи, задаваемые по умолчанию, в частности название организации и серийный номер, отображаются на свойства. Apple делает это за вас в классе PKPass. Однако если вы хотите получить доступ к значениям внутри primaryFields или в других подобных местах, то потребуется воспользоваться методом экземпляра localizedValueForFieldKey:, относящимся к классу PKPass. Мы сообщаем этому методу наши ключи, чтобы получить значения, ассоциированные с этими ключами. Далее показан небольшой фрагмент кода, позволяющий узнать информацию из талона, созданного в разделе 19.2: начальную и конечную точки маршрута, а также соответствующие железнодорожные платформы.