iOS 10 NSData 转化为NSString 失败

来源:互联网 发布:java搜索引擎源代码 编辑:程序博客网 时间:2024/04/28 01:03

遇到的问题

为了适配iOS 10 ,我新建了一个测试项目。结果发现了一个问题。就是NSData 转化为NSString  失败,使用  NSJSONSerialization 解析也失败。结果都是 nil.

下面我就来说说这个问题。这个问题是我在适配 iOS 10 推送通知,获取token 的时候发现的。当时 我获取了 token,但是转化成NSString 结果输出为 nil. 本来以为是token 没有获取到,但是直接输出 deviceToken 是有值得。就是转化为NSString 出现了问题。

NSString *token = [[NSString alloc]initWithData:deviceToken encoding:NSUTF8StringEncoding];    token =  [token stringByReplacingOccurrencesOfString:@" " withString:@""];    token =  [token stringByReplacingOccurrencesOfString:@"<" withString:@""];    token =  [token stringByReplacingOccurrencesOfString:@">" withString:@""];    NSLog(@"request notificatoin token success. %@",token);2016-09-20 15:25:09.837367 demo[3483:1451249] request notificatoin token success. (null)

我有试了系统的json 解析,结果也失败了。

 NSError *error;    NSString *tokenMessage = [NSJSONSerialization JSONObjectWithData:deviceToken options:kNilOptions error:&error];    if (error) {        NSLog(@"解析失败。 error= %@",error.localizedDescription);    }        NSLog(@"解析的token = %@",tokenMessage); 解析失败。 error= The data couldn’t be read because it isn’t in the correct format.2016-09-20 15:29:01.322631 demo[3486:1452379] 解析的token = (null)

错误原因是解析的格式错误。不知道这个只能成功的解析 方法,不知道为什么失效了。


PS: 有人告诉我deviceToken 不是json类型的文件,当然没办法解析。大家自动忽略上面这一段吧。


解决方法

目前的解决方法是暂时不使用系统的解析方法。

NSString *token = [deviceToken description];    token =  [token stringByReplacingOccurrencesOfString:@" " withString:@""];    token =  [token stringByReplacingOccurrencesOfString:@"<" withString:@""];    token =  [token stringByReplacingOccurrencesOfString:@">" withString:@""];    NSLog(@"request notificatoin token success. %@",token);2016-09-20 15:33:04.092966 demo[3489:1453498] request notificatoin token success. d6d1f2fa8f0f433663947173e08553dc4c7cdca073290672xxxxxxxxxxxxxxxx

使用 [deviceToken description]  这个方法,这个方法是Java的tostring 。所有的OC对象都可以使用这个方法。只要data不是用64之类的转码来的,都可以用这个转成字符串。这个方法并不是iOS 10 才出现的。







2 0
原创粉丝点击