NSURL(string:fullURL)返回错误

你好,我正在传递一些数据到Web服务。 这是我的url

http://www.website.com/mobileapp/user.php?reg_device_id=566&alert_details=[{\n \"is_active\" = 1;\n \"term_id\" = 55;\n}, {\n \"is_active\" = 1;\n \"term_id\" = 2;\n}, {\n \"is_active\" = 1;\n \"term_id\" = 111;\n}, {\n \"is_active\" = 0;\n \"term_id\" = 21;\n}, {\n \"is_active\" = 0;\n \"term_id\" = 28;\n}, {\n \"is_active\" = 0;\n \"term_id\" = 1;\n}, {\n \"is_active\" = 0;\n \"term_id\" = 5;\n}, {\n \"is_active\" = 0;\n \"term_id\" = 4;\n}] 

这是我的web服务调用方法

 for i in 0..<dm.array.count { let id=dm.SettingsItems[i]["term_id"] as! String var is_active="0" if dm.array[i] { is_active="1" } let catRegDict:NSDictionary=["term_id":"\(id)","is_active":"\(is_active)"] self.registerAyrray.append(catRegDict) print("------REGISTER ARRAY------\(self.registerAyrray)") } let urlPath = "http://www.website.com/mobileapp/user.php?" let path="reg_device_id=\(dm.DeviceID)&alert_details=\(self.registerAyrray)" let fullURL = "\(urlPath)\(path)" print(fullURL) guard let endpoint = NSURL(string: fullURL) else { print("Error creating endpoint") return } let request = NSMutableURLRequest(URL:endpoint) NSURLSession.sharedSession().dataTaskWithRequest(request,completionHandler: { (data, response, error) in do { 

但似乎这种情况并不令人满意。 我可以看到它prenting这个错误消息。

 guard let endpoint = NSURL(string: fullURL) else { print("Error creating endpoint") return } 

但是,当我把上面的url在浏览器中给我的服务响应。这是什么原因? 请帮帮我。 谢谢

尝试编码你的url ,然后像这样创buildNSURL对象。

 let url = fullURL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet()) 

现在在NSURL初始化中传递这个url

希望这会帮助你。

这是因为你的url不是有效的url。 你必须在使用之前对它进行encode url

 urlString.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet()) 

url不能包含空格或“[”或各种其他字符。 如果您阅读URLWithString上的Xcode文档,他们会说:

用来初始化NSURL对象的URLstring。 必须是符合RFC 2396的URL。此方法根据RFC 1738和1808parsingURLString。

查阅这些RFC在线获取更多信息。

@Arsen为您提供正确转义URL的代码,但为什么您要发送一个包含空格运行的URL,以及如何为alert_details生成查询string? alert_detailsstring看起来有点像漂亮的JSON。 你不应该使用漂亮的打印格式的URL参数。