Xcode 在编译时检查iOS10或更低版本
我正在使用UNUserNotificationCenter实现新通知。但我需要保持向后兼容,因此我到处都有检查:Xcode 在编译时检查iOS10或更低版本,xcode,notifications,swift2,ios10,Xcode,Notifications,Swift2,Ios10,我正在使用UNUserNotificationCenter实现新通知。但我需要保持向后兼容,因此我到处都有检查: if #available(iOS 10.0, *) { ... } else { ... } 在iOS10中,它似乎工作得很好。为了能够使用UNUserNotificationCenter框架,我必须导入: import NotificationCenter 但它使iOS9.3崩溃,因为它不知道它是什么。 这是一个编译时操作,而不是运行时操作-因此这意味着我不能对导入设置条件
if #available(iOS 10.0, *) { ... }
else { ... }
在iOS10中,它似乎工作得很好。为了能够使用UNUserNotificationCenter框架,我必须导入:
import NotificationCenter
但它使iOS9.3崩溃,因为它不知道它是什么。
这是一个编译时操作,而不是运行时操作-因此这意味着我不能对导入设置条件
@available(iOS 10.0, *)
class ....
在那里,导入也发生在类实现之前。
我应该如何解决这个问题?尝试导航到构建阶段->将二进制文件链接到库并添加NotificationCenter,并将状态设置为“可选”而不是“必需”。首先,您必须使用: 导入用户通知 用于本地通知 条件:Xcode 8 beta 6和Sierra beta 6 一些测试代码: a) iOS 10仅适用于swift 3:
override func viewDidLoad() {
super.viewDidLoad()
// ADC site:
// Listing 1
// Requesting authorization for user interactions
/*let center=UNUserNotificationCenter.currentNotificationCenter()
requestAuthorizationWithOptions([.Alert,.Sound]){(已授予,错误)位于
}
*/
2) 支持iOS 9:(我已更改部署目标)
你的意思可能是“构建阶段”,我把它放在那里,没有任何改变。意思是:我不能从类中删除导入,它仍然需要它。我做错什么了吗?你得到这个是因为你导入了“通知中心”?
// swift 3.0:
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
// swift 3.0:
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound]) { (granted, error) in
// Enable or disable features based on authorization.
}
} else {
// Fallback on earlier versions
}