2018-05-24

今天在使用URLWithString拼接NSURL的时候出现了nil:NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@?%@",host_url,baseurl,postURL]];  查了一下原因:This method expects URLString to contain any necessary percent escape codes, which are ‘:’, ‘/’, ‘%’, ‘#’, ‘;’, and ‘@’. Note that ‘%’ escapes are translated via UTF-8.大概的意思是说,转义方面的,但并非我这里拼接为nil的原因。不过他给的解决方案缺让我最终拼接的NSURL不为nil了。。所以以后在使用URLWithString来拼接NSURL尽量这样用:// 这样用,就不容易出现像上面的问题  NSString *urlStr = [NSString stringWithFormat:@"%@%@?%@", host_url, baseurl, postURL];  urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  NSURL *url = [NSURL URLWithString:urlStr];  这样就不容易出现URLWithString拼接NSURL为nil的情况,至少我这里就不会出现了。。问题描述URLWithString:(NSString )str relativeToURL:(NSURL )baseURL中baseURL结尾字段的相关问题拼接后被去掉的问题,情况如下图:

其中“v1”拼接后就被去掉了。



解决方法

在baseURL后拼接一个空字符串,即可解决这个问题,如果baseURL本身结尾带“/”,则空字符串不产生作用;如果baseURL结尾没有“/”,则拼接完成后会在baseURL上加入“/”。

如果这时再执行URLWithStringrelativeTOURL:就不会去掉任何字段了

理解

第一种情况baseURL中的URL地址以/结尾

输出结果

第二种情况baseURL中的URL地址不以/结尾

输出结果

从以上的结果中可以看出:

只要URLWithString中的参数格式是/xx,即是以/开头的,那么输出结果就是在baseURL中的http://example.com后面直接添加URLWithString中的参数,baseURL中的xx.com后的路径参数等全部不需要了。

如果URLWithString中的参数格式不是以/开头的,那么就要看baseURL中的路径是不是以/结尾,

如果是,那么直接拼接到baseURL路径后面

如果不是,那么就需要找到baseURL路径后面倒数第一个/的位置,插入URLWithString字符串即可,即删除baseURL后面的v2

如果URLWithString是完整的网址,则直接替换URLWithString

你可能感兴趣的:(2018-05-24)