Обновление PFObject не работает как ожидалось - PullRequest
0 голосов
/ 16 октября 2018

Здесь я пытаюсь установить поле состояния для каждого документа в коллекции (в mongoDB на Parse-Server / Heroku).Код ниже не очень сложен, но по какой-то причине не работает.Я надеюсь, что новый взгляд сможет указать, что не так.

let query = PFQuery(className: "Book_List")
query.limit = 1024
query.findObjectsInBackground {
    (objects:[PFObject]?, error:Error?) -> Void in
    if (error == nil && objects != nil) {
        for book in objects! {
            book.setObject("0", forKey: "status")
            book.saveInBackground {
                (success: Bool, error: Error?) in
                if !success {print("FAILED.")} else {print("OK-OK.")}
                if error != nil {print("Error = \(String(describing: error))")}
            }
        }
    }

    if error != nil {
        print("Error = \(error.debugDescription)")
    }

    if objects == nil {
        print("We haven't found anything on Parse!!")
    }
}

Я ожидаю, что это запустится и установит поле ({"status": "0"}) в каждом цикле.Но я вижу это только в консоли отладки:

FAILED.
Error = Optional(Error Domain=Parse Code=101 "Object not found." UserInfo={code=101, temporary=0, error=Object not found., NSLocalizedDescription=Object not found.})
... [Error]: Object not found. (Code: 101, Version: 1.17.1)

Поскольку я получаю объекты с помощью PFQuery-findObjectsInBackground, они где-то существуют.Так почему я получаю это сообщение об ошибке?

1 Ответ

0 голосов
/ 16 октября 2018

Вместо того, чтобы сохранять каждую книгу по отдельности, попробуйте сохранить ее одной порцией, используя + saveAllInBackground: block:

let query = PFQuery(className: "Book_List")
query.limit = 1024
query.findObjectsInBackground { (objects:[PFObject]?, error:Error?) in
    if error == nil,
       let objects = objects {
        for book in objects {
            book.setObject("0", forKey: "status")
        }
        PFObject.saveAllInBackground(objects: objects) { (success: Bool, error: Error?) in
            if !success { print("FAILED.") } else { print("OK-OK.") }
            if error != nil { print("Error = \(String(describing: error))") }
        }
    }

    if error != nil {
        print("Error = \(error.debugDescription)")
    }

    if objects == nil {
        print("We haven't found anything on Parse!!")
    }
}
...