iOS - трудности при сохранении Swift Dictionary в базу данных PostgreSQL - PullRequest
0 голосов
/ 30 ноября 2018

РЕШЕНА МОЯ ПРОБЛЕМА:

Несмотря на то, что я вносил изменения в свой код backend node.js и перезагружал файл на сервер, сервер не принимал эти изменения.Завершите работу сервера и перезапустите его, используя nodemon, и теперь все сохраняется правильно.


В настоящее время работаем над приложением для iPhone с использованием Swift, Node.js и базы данных PostgreSQL.

В настоящий момент все значения, кроме 4, которые я пытаюсь передать в базу данных, проходят правильно.Я считаю, что я все правильно определил.Ниже я опубликую некоторые фрагменты кода из моего Swift и Node.js, а также снимок экрана с сохранением значений в базе данных.Я буду отображать свои проблемы по мере продвижения.

Заранее благодарю за помощь!

Код Swift для словаря

let routeInfo = 
["userID": userID, 
"arrivalTime1" : arrivaltime1.text! as Any,
"arrivalTime2" : arrivaltime2.text! as Any,
"departureTime1" : "00:00", 
"departureTime2" : "00:00", 
"startPointLat": self.lat1, 
"startPointLong": self.lon1, 
"endPointLat": self.lat2, 
"endPointLong": self.lon2, 
"Driver": driver, 
"Name": self.routeName.text! as Any, 
"startAddress": startadd as Any, 
"endAddress": endadd as Any, 
"rideDate" : calendarInput.text! as Any, 
"extraTime" : "1", 
"isOneTime" : true, 
"rideDay" : calendarInput.text! as Any] as [String : Any]

Как этостоит, последние четыре значения, перечисленные здесь, не сохраняются: "rideDate", "extraTime", "isOneTime", "rideDay"

Где определяется calendarInput.text:

@objc func dateChanged(datePicker: UIDatePicker) {
    let calendarFormatter = DateFormatter()
    calendarFormatter.dateFormat = "yyyy-MM-dd"
    calendarInput.text = calendarFormatter.string(from: datePicker.date)
}

В базе данных rideDate определяется как текстовый тип данных, extraTime - это текстовый тип данных, isOneTime - логическое значение, а rideDay - тип даты.

Следующий фрагмент кода находится в Swift и там, где routeInfo передается методу JSONSerialization.

JSONSerialization

let routeURL = URL(string: "http://myServerString:3000/routes/")!
var request = URLRequest(url: routeURL)
let routeJSON = try! JSONSerialization.data(withJSONObject: routeInfo, options: .prettyPrinted)
let routeJSONInfo = NSString(data: routeJSON, encoding: String.Encoding.utf8.rawValue)! as String
request.httpBody = "routeInfo=\(routeJSONInfo)".data(using: String.Encoding.utf8)
request.httpMethod = "POST" // POST method.

Вот соответствующий оператор вставки базы данных:

База данных

db.any(`INSERT INTO database.\"Routes\"
(\"riderID\",
\"departureTime1\", \"departureTime2\",  
\"arrivalTime1\", \"arrivalTime2\", 
\"startPointLong\", \"startPointLat\", 
\"endPointLong\", \"endPointLat\", 
\"Name\", \"Days\", 
\"Matched\", \"Driver\", 
\"startAddress\", \"endAddress\", 
\"rideDate\", \"extraTime\", 
\"isOneTime\", \"rideDay\") 
values(
'${userID}', 
${routeJSON['arrivalTime1']}, ${routeJSON['arrivalTime2']},
${routeJSON['departureTime1']}, ${routeJSON['departureTime2']}, 
${routeJSON['startPointLong']}, ${routeJSON['startPointLat']}, 
${routeJSON['endPointLong']}, ${routeJSON['endPointLat']}, 
${routeJSON['Name']}, 0, false, false, 
${routeJSON['startAddress']}, ${routeJSON['endAddress']}, 
${routeJSON[rideDate]}, ${routeJSON['Days']}, 
${routeJSON['extraTime']}, ${routeJSON['isOneTime']},
${routeJSON['rideDay']}))`

После выполнения этого запроса вставки в серверной части я получаю сообщение об успешном завершении в консоли сервера о том, что маршрут добавлен.

GET /routes/saved?userID=10 304 31.664 ms - -
{ extraTime: '1',
  endPointLat: 38.8976719,
  startAddress:
   'Lincoln Memorial, 2 Lincoln Memorial Cir NW, Washington, DC 20037, United States',
  arrivalTime2: '3:58 PM',
  Name: 'SO',
  arrivalTime1: '3:57 PM',
  endAddress: 'The White House, 1600 Pennsylvania Ave NW, Washington, DC 20500-0003, United States',
  isOneTime: true,
  departureTime2: '00:00',
  rideDate: '2018-11-30',
  Driver: false,
  departureTime1: '00:00',
  startPointLat: 38.8892673,
  startPointLong: -77.0501086,
  rideDay: '2018-11-30',
  userID: '10',
  endPointLong: -77.036603 }
Successfully added route.
POST /routes/ 200 63.285 ms - 52

После того, как все эти шаги были выполнены .. Все данные но rideDate, rideDay, isOneTime и extraTime сохраняются.Они просто отображаются как NULL или пустые значения в таблице.

Все значения определены там, где это необходимо, так что я думаю.

Несколько мыслей?:

  • После создания таблицы были добавлены столбцы базы данных, может ли это вообще вызывать проблемы?
  • I 'неправильно отправляю значение в вызов вставки
  • Где-то отсутствует соединение

Я понимаю, что это довольно долго, и я ценю любую помощь, которая предоставляется.Если есть какие-либо вопросы или есть какой-либо другой необходимый код для просмотра, пожалуйста, дайте мне знать.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...