Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 3获取通知数据_Ios_Push Notification_Swift3 - Fatal编程技术网

Ios Swift 3获取通知数据

Ios Swift 3获取通知数据,ios,push-notification,swift3,Ios,Push Notification,Swift3,我正在尝试使用本教程从swift 3中的通知中获取数据:不幸的是,我遇到以下错误: private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) { let aps = notification["aps"] as? [String:AnyObject] let alert = aps["alert"] as? [String:AnyObject] let title =

我正在尝试使用本教程从swift 3中的通知中获取数据:不幸的是,我遇到以下错误:

private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) {
    let aps = notification["aps"] as? [String:AnyObject]
    let alert = aps["alert"] as? [String:AnyObject]
    let title = alert?["title"] as? String
    let body = alert?["body"] as? String
    return (title ?? "-", body ?? "-")
}

问题在于
通知
被声明为具有
NSObject
类型键的字典。但您尝试使用
String
类型的键访问该词典<代码>字符串不是
NSObject
。一种解决方案是将
字符串转换为
NSString

修正会出现下一行修正的另一个错误。因此,您的代码最终如下所示:

private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) {
    let aps = notification["aps" as NSString] as? [String:AnyObject]
    let alert = aps?["alert"] as? [String:AnyObject]
    let title = alert?["title"] as? String
    let body = alert?["body"] as? String
    return (title ?? "-", body ?? "-")
}

说到这里,该教程有很多错误,在很多地方使用了错误的参数类型。此
getAlert
方法不应使用
NSObject
。它应该是
String

问题是
通知
被声明为具有
NSObject
类型键的字典。但您尝试使用
String
类型的键访问该词典<代码>字符串
不是
NSObject
。一种解决方案是将
字符串转换为
NSString

修正会出现下一行修正的另一个错误。因此,您的代码最终如下所示:

private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) {
    let aps = notification["aps" as NSString] as? [String:AnyObject]
    let alert = aps?["alert"] as? [String:AnyObject]
    let title = alert?["title"] as? String
    let body = alert?["body"] as? String
    return (title ?? "-", body ?? "-")
}

说到这里,该教程有很多错误,在很多地方使用了错误的参数类型。此
getAlert
方法不应使用
NSObject
。应该是
String

你检查过post吗?@Eeshwar是的,检查了很多,没有一个有效请将你的代码作为实际代码发布,不是以图像的形式。您可以在文档中查找@rmaddyHint:Lookup
DidReceiveEmotentification
,并检查
userInfo
参数的类型您是否检查了post?@Eeshwar是检查了很多,没有一个有效请将您的代码作为实际代码发布,不作为图像。您可以在文档中查找@rmaddyHint:Lookup
DidReceiveEmotentification
,并检查
userInfo
参数的类型Swift 3中的通知
userInfo
字典是
[AnyHashable:Any]
,标准JSON字典是
[String:Any]
。OP不应该使用过时的类型。@vadian同意。这就是我在回答中最后一句话的原因。本教程有很多问题,并且到处传播错误的数据类型。我的大部分回答直接解决了当前代码的错误原因,并针对该特定问题提出了一种解决方案。当然,正如我在最后所说的,更好的解决方案是使用正确的类型。Swift 3中的通知
userInfo
字典是
[AnyHashable:Any]
,标准JSON字典是
[String:Any]
。OP不应该使用过时的类型。@vadian同意。这就是我在回答中最后一句话的原因。本教程有很多问题,并且到处传播错误的数据类型。我的大部分回答直接解决了当前代码的错误原因,并针对该特定问题提出了一种解决方案。当然,正如我在最后所说的,更好的解决方案是使用正确的类型。