try 在iOS 8下注册推送通知时.x:

application.registerForRemoteNotificationTypes(UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound)

我得到以下错误:

registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later.

有什么新方法吗?当我在iOS 7上运行这个Swift应用程序时,它确实有效.十、

EDIT

On iOS 7.x when I include the conditional code I get (either SystemVersion conditional or #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000)

dyld: Symbol not found: _OBJC_CLASS_$_UIUserNotificationSettings

推荐答案

正如您所描述的,您需要根据不同版本的iOS使用不同的方法.如果您的团队同时使用Xcode 5(它不知道任何iOS 8 Select 器)和Xcode 6,那么您需要使用条件编译,如下所示:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    // use registerUserNotificationSettings
} else {
    // use registerForRemoteNotificationTypes:
}
#else
// use registerForRemoteNotificationTypes:
#endif

如果您只使用Xcode 6,您可以坚持以下几点:

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    // use registerUserNotificationSettings
} else {
    // use registerForRemoteNotificationTypes:
}

原因在于,在iOS 8中,您获取通知权限的方式已经改变.UserNotification是向用户显示的消息,无论是从远程还是从本地.你需要得到许可才能展示.WWDC 2014视频"What's New in iOS Notifications"对此进行了描述

Objective-c相关问答推荐

在没有for循环的情况下获取另一个数组中每个对象的属性值数组

iphone - 防止uiscrollview通过滚动

如何在运行时向对象添加属性?

如何可靠地检测 iOS 9 上是否连接了外部键盘?

iOS 块和对自身的强/弱引用

目标 C:在不离开应用程序的情况下发送Electron邮件

iOS performSelectorOnMainThread 有多个参数

Objective C const NSString * vs NSString * const

.delegate=self 是什么意思?

更改后退导航栏按钮的字体

Apple 的 API 中的k前缀表示什么?

使用 DatePicker 展开和折叠 UITableViewCells

在不导入自己的情况下播放系统声音

NSManagedObjectContext:异常断点在 save: 方法处停止,但没有日志(log)/崩溃/错误

当用户点击文本字段外的其他区域时如何关闭键盘?

我可以在 Objective-C switch 语句中声明变量吗?

导航返回时重新加载 UITableView?

Objective-c 协议前向声明

将自定义子视图(在 xib 中创建)添加到视图控制器的视图 - 我在做什么错

UiTextField 中的第一个字母小写