今天在使用URLWithString拼接NSURL的時候出現(xiàn)了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.大概的意思是說,轉(zhuǎn)義方面的,但并非我這里拼接為nil的原因。不過他給的解決方案缺讓我最終拼接的NSURL不為nil了。。所以以后在使用URLWithString來拼接NSURL盡量這樣用://?這樣用,就不容易出現(xiàn)像上面的問題??NSString?*urlStr?=?[NSString?stringWithFormat:@"%@%@?%@",?host_url,?baseurl,?postURL];??urlStr?=?[urlStr?stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];??NSURL?*url?=?[NSURL?URLWithString:urlStr];??這樣就不容易出現(xiàn)URLWithString拼接NSURL為nil的情況,至少我這里就不會出現(xiàn)了。。問題描述URLWithString:(NSString?)str relativeToURL:(NSURL?)baseURL中baseURL結(jié)尾字段的相關(guān)問題拼接后被去掉的問題,情況如下圖:

其中“v1”拼接后就被去掉了。
解決方法
在baseURL后拼接一個空字符串,即可解決這個問題,如果baseURL本身結(jié)尾帶“/”,則空字符串不產(chǎn)生作用;如果baseURL結(jié)尾沒有“/”,則拼接完成后會在baseURL上加入“/”。
如果這時再執(zhí)行URLWithStringrelativeTOURL:就不會去掉任何字段了

理解
第一種情況baseURL中的URL地址以/結(jié)尾
輸出結(jié)果
第二種情況baseURL中的URL地址不以/結(jié)尾
輸出結(jié)果
從以上的結(jié)果中可以看出:
只要URLWithString中的參數(shù)格式是/xx,即是以/開頭的,那么輸出結(jié)果就是在baseURL中的http://example.com后面直接添加URLWithString中的參數(shù),baseURL中的xx.com后的路徑參數(shù)等全部不需要了。
如果URLWithString中的參數(shù)格式不是以/開頭的,那么就要看baseURL中的路徑是不是以/結(jié)尾,
如果是,那么直接拼接到baseURL路徑后面
如果不是,那么就需要找到baseURL路徑后面倒數(shù)第一個/的位置,插入URLWithString字符串即可,即刪除baseURL后面的v2
如果URLWithString是完整的網(wǎng)址,則直接替換URLWithString