嗨,我是iOS新手所以请帮助我..
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSDictionary *segueDictionary = [userInfo valueForKey:@"aps"];
NSLog(@"%@",userInfo);
NSString * string=[[NSString alloc]initWithFormat:@"%@",[segueDictionary valueForKey:@"vendor_data"]];}
输出
{
aps = {
alert = "Get Upto 50% Off ";
sound = default;
"vendor_data" = {
cat = "Baby & kids";
"closing_hours" = "09:00 PM";
latitude = "28.57089323";
longitude = "77.32666539";
"offer_desc" = "Get Upto 50% Off On All Kids Clothing.";
"offer_id" = 1128;
"offer_in_percentage" = "Get Upto 50% Off ";
"offer_item_name" = Lilliput;
"offer_valid_upto" = "2015-10-30";
"opening_hours" = "10:00 AM";
"phone_no" = "*********";
pincode = 0;
rating = 0;
"sub_category" = "Clothing,Footwear";
title = "Offer Of The Day";
"vendor_address" = "***********";
"vendor_id" = "lliputkids.com";
"vendor_location" = "*****";
"vendor_name" = Lilliput;
"vendor_type" = shop;
};
};
}
这来自推送通知数据
NSString * string = {
cat = "Baby & kids";
"closing_hours" = "09:00 PM";
latitude = "28.57089323";
longitude = "77.32666539";
"offer_desc" = "Get Upto 50% Off On All Kids Clothing.";
"offer_id" = 1128;
"offer_in_percentage" = "Get Upto 50% Off ";
"offer_item_name" = Lilliput;
"offer_valid_upto" = "2015-10-30";
"opening_hours" = "10:00 AM";
"phone_no" = "********";
pincode = 0;
rating = 0;
"sub_category" = "Clothing,Footwear";
title = "Offer Of The Day";
"vendor_address" = "shop.no- 6, sun market";
"vendor_id" = "illiputkids.com";
"vendor_location" = "*******";
"vendor_name" = Lilliput;
"vendor_type" = shop;}
这个数据是字符串格式,但我想要字典格式 我正在以字符串格式获取数据。 所以请帮帮我 提前致谢
答案 0 :(得分:1)
我相信你误解了JSON格式。
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
现在,如果您执行以下NSLog语句
NSLog(@"%@",[json objectForKey:@"sub_category"]);
它会给你: - 服装,鞋类
答案 1 :(得分:1)
userInfo
的{{1}}参数会返回didReceivePushNotification
个对象。
您可以直接使用
获取NSDictionary
词典
vendor_data
或使用下标
NSDictionary *vendorDataDictionary = [[userInfo objectForKey:@"aps"] objectForKey:@"vendor_data"];
方法NSDictionary *vendorDataDictionary = userInfo[@"aps"][@"vendor_data"];
是一种特殊的KVC方法。获取密钥对象的标准方法是valueForKey:
答案 2 :(得分:1)
请查看此内容。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSDictionary *segueDictionary = [userInfo valueForKey:@"aps"];
NSLog(@"%@",userInfo);
NSDictionary *vendorDic = [segueDictionary valueForKey:@"vendor_data"];
NSString *vedorAddress = [vendorDic valueForKey:@"vendor_address"];
}
注意:
答案 3 :(得分:1)
发送远程通知时,其有效内容的格式为JSON。大致解释一下,它只是将所有对象放在词典和词典中。数组,这样您就可以在有效负载中拥有清晰的对象层次结构。
你现在正在做的只是将JSON放在一个字符串中,而不是有单独的对象(包含对象的数组和字典),你有一个包含所有这些对象的长字符串。
您需要执行以下操作
确保在通知有效负载中发送有效的格式化JSON。我不知道你是如何发送它的,所以我无法帮助你。
收到推送后,您有一个userInfo
字典,您可以使用:objectForKey
进行导航。这是您的JSON,已经转换为Objective-C对象。
您应该在字典中看到完整的结构。对象和键,具有适当的层次结构。
如果您在aps
密钥或其他自定义密钥中看到一个字符串,那么您发送的数据错误
但如果你有
在userInfo
中使用这种结构,这意味着你很高兴。通知处理的第一行有一个断点很容易找到,并查看userInfo
中的内容。
然后只看一下那里的内容并手动获取它,但如果您自己创建了通知负载(您可能已经这样做了),那么您应该知道哪些数组/字典包含哪些对象,并且只需手动获取它。
//I'm just giving EXAMPLES :
NSDictionary *corePayload = [userInfo objectForKey:@"aps"];
NSDictinoary *firstLevel = [userInfo objectForKey:@"vendor_data"];
float latitude = [[firstLevel objectForKey:@"latitude"]floatValue];
就像你可以获取任何东西和其他东西。
请注意,根据您展示的内容,您的内容格式不正确,您的某些密钥有""有些人不这样做,这是不正常的。因此,我建议您真正了解一下您发送的内容,并仔细遵循我的所有步骤。如果您的第一步不正确,请不要进入下一步;)
希望您能找到您正在寻找的东西!