【发布时间】:2015-04-27 07:36:20
【问题描述】:
我正在尝试通过以下参数快速发出获取请求
var dict = [
"id_struttura" : 2,
"prenCheck" : [
"codice" : "14:30_15:20_1_3831_0",
"id_sport" : 6,
"ora_fine" : "20/02/2015 15:20:00",
"ora_inizio" : "20/02/2015 14:30:00",
"rec" : 0,
"soci" : [
[
"esterno" : 0,
"id" : "1980"
],
[
"esterno" : 0,
"id" : "51"
]
]
]
]
使用以下方法:
private func genericRequest(method: Methods, url: String, data: [String: AnyObject]?) -> AnyObject?{
var getRequest : NSURLRequest?
var postRequest : NSMutableURLRequest?
if method == Methods.GET{
var completeUrl = url
if(data != nil){
//println(data)
completeUrl += "?"
for (key, value) in data! {
completeUrl += "\(key)=\(value)&"
}
completeUrl = completeUrl.substringToIndex(completeUrl.endIndex.predecessor())
}
//println(completeUrl)
let url = NSURL(string: completeUrl)
getRequest = NSURLRequest(URL: url!)
}else if method == Methods.POST{
postRequest = NSMutableURLRequest(URL: NSURL(string: url)!)
var session = NSURLSession.sharedSession()
postRequest!.HTTPMethod = "POST"
var params : String = ""
for (key, value) in data! {
params += "\(key)=\(value)&"
}
params = params.substringToIndex(params.endIndex.predecessor())
var err: NSError?
postRequest!.HTTPBody = params.dataUsingEncoding(NSUTF8StringEncoding);
}
var response: NSURLResponse? = nil
var error: NSError? = nil
var request = getRequest != nil ? getRequest! : postRequest!
let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse:&response, error:&error)
//println((response as NSHTTPURLResponse).statusCode)
let results = NSString(data:reply!, encoding:NSUTF8StringEncoding)
var json: AnyObject? = convertDataToJSON(reply)
return json
}
将其称为genericRequest(Method.GET ,url:url, data: dict)(因为 Method 只是一个枚举)它无法在发出 get 请求时解开 for (key,value)in data! 中的数据变量,但在发出 post 请求时可以。由于我只能使用获取此任务的请求(我正在处理一个糟糕的休息界面),有人可以帮助我吗?
更新:
我也试过if let data = data { ...,它在这条线上崩溃了,上面写着unexpectedly found nil while unwrapping an Optional value
【问题讨论】:
-
您是否检查过该操作在服务器上是否可用?您是否尝试过 Curl 它或通过 http/Advanced Rest 客户端发送请求?
-
您需要将 NSURLRequest 上的 .method 设置为您选择的方法,我认为 post 是默认方法,但如果您要使用 get 则 getRequest.method = "GET"
-
是的,确实如此。服务端几乎接受了get中的所有请求
-
也许我没有解释清楚,这段代码只是在第一个
for (key, value) in data!中崩溃,因为它发现 data = nil 不是。我认为这与连接无关 -
我的意思是,这是一个 Xcode 错误 :)。实际的错误行不存在。这个问题似乎在 Xcode 6.3 Beta 中修复了,试试吧。