美文网首页
2018-05-24

2018-05-24

作者: 东丶小菜鸟 | 来源:发表于2018-05-24 17:02 被阅读12次

    今天在使用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

          本文链接:https://www.haomeiwen.com/subject/oamsjftx.html