Мы написали API узла для школьного задания. Мы протестировали весь API. (Вероятность того, что что-то не так, невелика.)
После этого я начал работать над клиентом iOS для пользователей CRUD.
Создание пользователя проходит идеально, но всякий раз, когда я попробуйте отредактировать пользователя, происходит что-то странное. Данные на сервер поступают как неопределенные.
Для сохранения пользователя я использую следующий код:
Код: Выделить всё
func saveUser(user: User, completionHandler: (String?, User?) -> Void) {
let url = NSURL(string: "https://pokeapi9001.herokuapp.com/api/users/")
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST"
let postString = "email=\(user.email)&password=\(user.password!)&role=\(user.role)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error: \(error)")
}
do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
//do specific things
} catch let error as JSONError {
completionHandler(error.rawValue, nil)
} catch let error as NSError {
completionHandler(error.debugDescription, nil)
}
}
task.resume()
}
Чтобы редактировать пользователя Я использую следующий код:
Код: Выделить всё
func editUser(user: User, completionHandler: (String?, User?) -> Void) {
let url = NSURL(string: "https://pokeapi9001.herokuapp.com/api/users/\(user.id!)")
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "PUT"
let postString = "email=\(user.email)&password=\(user.password!)&role=\(user.role)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error: \(error)")
}
do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
//do specific things
} catch let error as JSONError {
completionHandler(error.rawValue, nil)
} catch let error as NSError {
completionHandler(error.debugDescription, nil)
}
}
task.resume()
}
У меня есть действительно понятия не имею, что я делаю не так, может быть что-то маленькое и глупое. Пожалуйста, помогите.
Редактировать после ввода от @fiks
Чтобы внести ясность, проблема в том, что я заполняю postString в методе editUser точно так же, как и в методе saveUser. (По крайней мере, я так думаю).
Однако в методе saveUser postString, похоже, правильно передается в API (он создает нового пользователя с заданными значениями).
Метод editUser не передает значения.
Если я помещаю журнал консоли на сервер, он показывает, что все значения «не определены».Чтобы проверить правильность postString на Часть iOS. Я распечатал обе строки. Оба они вывели:
email=user@test.com&password=test&role=admin
Подробнее здесь: https://stackoverflow.com/questions/404 ... ith-a-post
Мобильная версия