2015-05-17 2 views
0

Я борюсь с сохранением 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

успех: ложь, ошибка: объект не найден

Может кто-нибудь пролить свет?

+0

необходимо просмотреть код – danh

+0

Добавленные фрагменты кода – Zoef

ответ

1

Фу, наконец, решил этот.

Когда пользователь B получает поездку, он меняет свойство trip.respondingUser.travelTime. respondingUser - это еще один экземпляр подкласса PFObject, созданный пользователем A. Я забыл предоставить пользователю B доступ к этому экземпляру подкласса PFObject, прежде чем отправить его пользователю B, включив эту строку кода: trip.respondingUser?.ACL?.setWriteAccess(true, forUser: respondingUser) где responseingUser является экземпляром PFUser, ссылающимся на пользователя B, пользователь, который получает trip.

Проблема решена, спасибо, что посмотрели.

Смежные вопросы