Я борюсь с сохранением PFObject: trip
- это свойство на UIViewController
, оно имеет тип UNTrip
подкласс PFObject
. Мое приложение загружает поездку, созданную другим пользователем. Как только я изменю свойство в этой поездке, а затем попытаюсь сохранить его с saveInBackgroundWithBlock
, я получаю сообщение об ошибке «объект не найден». Я удостоверился, что у обоих отправляющих и получающих пользователей есть доступ на запись, который я проверил в консоли Parse. Я также пытался с открытым доступом к записи безрезультатно, так что, по-видимому, это не проблема.Анализ: [Ошибка]: объект не найден для обновления (Код: 101, Версия: 1.7.2)
objectId
не тронут, так что это тоже не проблема.
Это то, что консоль показывает:
(PFObject) Parse.PFObject = { NSObject = { isa = Unter.UNTrip } dirty = false operationSetQueue = 0x0000000171651f10 "1 value" estimatedData = 0x0000000171653290 5 key/value pairs lock = 0x00000001702157c0 hasBeenFetched = true _dataAvailability = 0x0000000171651f40 4 key/value pairs _isDeleted = false _deletingEventually = 0 serverData = 0x0000000171651a90 5 key/value pairs hashedObjectsCache = 0x00000001716524b0 2 key/value pairs updatedAt = 0x0000000170215810 2015-05-17 14:23:29 UTC createdAt = 0x0000000170215800 2015-05-17 14:23:29 UTC localId = nil objectId = 0x000000017063e860 "M4WqMOFtMn" parseClassName = "UNTrip" createdAsPointer = true _eventuallyTaskQueue = 0x000000017063dbc0 saveDelegate = nil taskQueue = 0x000000017063db40 }
UNTrip класс: class UNTrip: PFObject, PFSubclassing, Printable{
Поездка успешно сохранен пользователем А в облаке, настройка доступа на запись как для пользователей А и В (respondingUser
):
func saveTripToCloud(trip: UNTrip){
// Find user
let userQuery = PFUser.query()
userQuery?.whereKey("email", equalTo: trip.respondingUser!.email)
userQuery?.getFirstObjectInBackgroundWithBlock({ (object: PFObject?, error: NSError?) -> Void in
if let respondingUser = object as? PFUser {
println("First user: \(respondingUser.username)")
trip.ACL?.setWriteAccess(true, forUser: respondingUser)
trip.ACL?.setWriteAccess(true, forUser: PFUser.currentUser()!)
trip.saveInBackgroundWithBlock{(success: Bool, error: NSError?) -> Void in
Пользователь B успешно получает поездку из облака после получения толчка с помощью o bjectId (includeKey также получить другие сохраненные PFObjects):
if let objectId = userInfo["objectId"] as? String {
var query = PFQuery(className: "UNTrip")
query.includeKey("requestingUser")
query.includeKey("respondingUser")
query.getObjectInBackgroundWithId(objectId, block: { (object: PFObject?, error: NSError?) -> Void in
пользователя B затем изменяет одно из свойств на поездки (использование самостоятельно, так как это делается в блоке завершения):
self.trip?.respondingUser?.travelTime = travelTime
Пользователь B затем неудачен в попытке сохранить путешествие обратно в облако с помощью:
trip?.saveInBackgroundWithBlock({ (succes:Bool, error: NSError?) -> Void in
успех: ложь, ошибка: объект не найден
Может кто-нибудь пролить свет?
необходимо просмотреть код – danh
Добавленные фрагменты кода – Zoef