Dun*_*age 4 objective-c uiapplicationdelegate swift watchkit wkextension
在 iOS 应用程序中,您可以通过以下方式获取对共享应用程序委托的引用:
迅速:
let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
目标-C:
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
在 WatchKit2 App Extension 中有一个类似的 App Delegate,我想在视图控制器中获取对它的引用,以访问应用程序中的共享资源,例如核心数据堆栈的 ManagedObjectModel 和 PersistentStoreCoordinator,我已在应用代理。
但是,UIApplication.sharedApplication().delegate as! AppDelegate报告错误,
使用未解析的标识符“UIApplication”
如何访问 WatchKit2 应用扩展中的应用委托?
WKExtensionWatchOS 2 中的类自动为每个扩展提供单个扩展对象,以管理在所有应用程序界面控制器之间共享的行为。在苹果的文档注释,你“使用扩展对象来执行应用程序级的任务,例如打开URL,并让你的应用程序的根接口控制器”。
就像在 iOS 中一样,在您的 WatchKit App Extension 中,您提供自己的委托对象,即您尝试引用的对象。这会自动分配给 WKExtension 对象的委托属性,并且可以使用类似于在 iOS 中访问 UIApplication 委托的方法进行访问:
迅速:
let delegate = WKExtension.sharedExtension().delegate as! ExtensionDelegate
目标-C:
WKExtensionDelegate *delegate = [[WKExtension sharedExtension] delegate];
WKExtension 类的Apple 文档提供了有关功能的更多信息。
更深入:
WatchKit App Extensions 并非在所有情况下都必须提供 WKExtensionDelegate。正如Apple的WKExtensionDelegate 文档所指出的那样,“您提供委托对象并使用它来管理扩展中的生命周期事件。如果您的扩展支持可操作的通知或切换行为,则需要提供委托对象。”
你会知道你的 WatchKit App Extension 是否有一个委托对象,如果有,在你的 App Extension 生命周期中,你将没有任何意义试图访问它不存在的 App Delegate。因此,虽然WKExtension.sharedExtension().delegate是可选的(WatchKit App Extensions 可能存在于未设置委托的地方),但as!在上面的示例中,使用强制将返回值强制转换为非可选是安全的,因为开发人员知道他们已在其中设置了 WKExtensionDelegate他们的应用程序扩展。
| 归档时间: |
|
| 查看次数: |
3066 次 |
| 最近记录: |