由于UIApplication.sharedApplication()在今天的 iOS8 小部件/扩展中不可用,我如何动态检查代码当前是作为小部件还是作为应用程序运行?运行应用程序时,我想调用例如
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
当运行与小部件相同的代码时,应该简单地跳过它。可以检查这个吗?
由于UIApplication.sharedApplication()在今天的 iOS8 小部件/扩展中不可用,我如何动态检查代码当前是作为小部件还是作为应用程序运行?运行应用程序时,我想调用例如
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
当运行与小部件相同的代码时,应该简单地跳过它。可以检查这个吗?
为您的扩展创建一个单独的前缀文件,在应用程序的前缀文件中未定义的前缀文件中定义一个宏。然后检查是否定义了此宏将告诉您是否在扩展中。或者,您可以在应用程序的前缀文件中而不是在扩展程序中定义宏,然后在另一个方向检查。
我的解决方案:
#ifdef UIApplication
... //App
#else
... //Today Extension
#endif
我检查了我的主机应用程序的包标识符,以确定我是在其中运行还是在我的 Today Extension 中运行。
例如:
if Bundle.main.bundleIdentifier == "your.host.app.bundleIdentifier" {
UIApplication.sharedApplication().registerUserNotificationSettings(setting)
} else {
// Today Extension
}