【发布时间】:2020-08-16 16:58:14
【问题描述】:
我正在从其他视图控制器获取参数值,并且我正在完美地获取参数值但我无法将其添加到 API
如果我硬编码eventStatus 那么它就可以工作
还有来自 otherviewcontroller 的 eventStatus 值也很完美,我无法添加到 API 中
如果我像这样硬编码它的工作
var eventType = "Draft"
let string = Constants.GLOBAL_URL + "/get/allevents/?eventstatus=\(self.eventType)"
代码:这里我得到了正确的eventStatus 值,但是当断点控制到其他地方时,为什么?
class EventsViewController: UIViewController {
var eventsListArray = [AnyObject]()
// var eventType = "Draft"
var eventType: String!
var eventList : EventsModel? = nil
@IBOutlet weak var eventsTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
getAllEventsList()
}
func getAllEventsList() {
DispatchQueue.main.async {
let headers = ["deviceid": deviceId,"userType": "personal","key": personalId]
DispatchQueue.main.async {
//let string = Constants.GLOBAL_URL + "/get/allevents/?eventstatus=\(self.eventType)"
let string = Constants.GLOBAL_URL + "/get/allevents"
var urlComponents = URLComponents(string: string)
let eventStatus = self.eventType
print("event status value in API call \(eventStatus)")
let requestEventType = URLQueryItem(name: "eventstatus", value: eventStatus)
urlComponents?.queryItems = [requestEventType]
let urlStr = urlComponents?.url
var request = URLRequest(url: urlStr!, cachePolicy: .useProtocolCachePolicy,timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers as! [String : String]
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
DispatchQueue.main.async {
if error == nil {
let httpResponse = response as? HTTPURLResponse
if httpResponse!.statusCode == 200 {
do {
let jsonObject = try JSONSerialization.jsonObject(with: data!) as! [String :Any]
print("publish event \(jsonObject)")
self.eventList = EventsModel.init(fromDictionary: jsonObject)
DispatchQueue.main.async {
if self.eventList?.events.count != 0 {
DispatchQueue.main.async {
self.eventsTableView.reloadData()
}
}
else {
DispatchQueue.main.async {
Constants.showAlertView(alertViewTitle: "", Message: "No Events \(self.eventType)", on: self)
self.eventList?.events.removeAll()
self.eventsTableView.reloadData()
}
}
}
} catch { print(error.localizedDescription) }
} else {
Constants.showAlertView(alertViewTitle: "", Message: "Something went wrong, Please try again", on: self)
}
}
}
})
dataTask.resume()
}
}
}
}
我哪里错了,为什么 eventStatus 值没有添加到 API 中......请建议我
【问题讨论】:
-
eventType从未在控制器中设置,因此它是nil。而且您的代码仍然包含诸如AnyObject(将其替换为Any)、NSMutableURLRequest(将其替换为var..URLRequest)和.mutableLeaves(删除options参数)等不良做法。跨度> -
@vadian 我已经根据您的建议更改了我的代码.. 我已将
eventType指定为非可选然后控制转到其他部分.. 我错了 -
再次在哪里为
eventType赋值?在代码中它已声明但未初始化。 -
@vadian 这里是
let requestEventType = URLQueryItem(name: "eventstatus", value: eventStatus)。这里eventStatus包含eventType -
@swiftDev vadian 询问您在哪里设置
eventType的值。虽然如果你强行打开它应该会崩溃。