Какъв е еквивалентът на UIApplication.sharedApplication().delegate в WatchKit?

В приложение за iOS можете да получите препратка към делегата на споделеното приложение чрез:

Swift:
let delegate = UIApplication.sharedApplication().delegate as! AppDelegate

Цел-C:
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];

В разширение на приложение WatchKit2 има подобен делегат на приложение и искам да получа препратка към него в контролер за изглед за достъп до споделени ресурси в приложението, като например ManagedObjectModel и PersistentStoreCoordinator за стека Core Data, които съм инициализирал в Делегат на приложението.

Въпреки това UIApplication.sharedApplication().delegate as! AppDelegate съобщава за грешката,

Използване на неразрешен идентификатор „UIApplication“

Как мога да получа достъп до делегата на приложението в разширение на приложението WatchKit2?


person Duncan Babbage    schedule 28.03.2016    source източник


Отговори (1)


Класът WKExtension в WatchOS 2 автоматично предоставя един обект на разширение за всяко разширение, за да управлява поведението, което се споделя между всички интерфейсни контролери на вашето приложение. Документацията на Apple отбелязва, че „използвате обект за разширение за изпълнение на задачи на ниво приложение, като отваряне на URL адреси и получаване на основния контролер на интерфейса на вашето приложение."

Точно както в iOS, във вашето разширение за приложение WatchKit вие предоставяте свой собствен делегиран обект, този, който се опитвате да посочите. Това автоматично се присвоява на свойството делегат на обекта WKExtension и може да бъде достъпно чрез метод, подобен на този, използван за достъп до делегата на UIApplication в iOS:

Swift:
let delegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate

Цел-C:
WKExtensionDelegate *delegate = [[WKExtension sharedExtension] delegate];

Документацията на Apple за WKExtension Class предоставя допълнителни информация за възможностите.


Задълбочаване:
Разширенията за приложения на WatchKit не трябва при всички обстоятелства да предоставят WKExtensionDelegate. Като Документацията на WKExtensionDelegate от Apple отбелязва: „Вие предоставяте делегирания обект и го използвате, за да управлявате събития от жизнения цикъл във вашето разширение. Предоставянето на делегатен обект се изисква, ако вашето разширение поддържа уведомления за действие или поведение на Handoff.“

Ще знаете дали вашето разширение за приложение WatchKit има делегиран обект и ако има, няма да има точка в жизнения цикъл на вашето разширение за приложение, където да се опитвате да получите достъп до този делегат на приложение, където той няма да съществува. Следователно, докато WKExtension.sharedExtension().delegate е незадължителен (WatchKit App Extensions може да съществува, когато не е зададен делегат), е безопасно да се използва as! за принудително предаване на връщането да бъде незадължително в примера по-горе, като се има предвид, че разработчикът знае, че е задал WKExtensionDelegate в тяхното разширение за приложение.

person Duncan Babbage    schedule 28.03.2016