解析:[错误]:找不到更新的对象(代码:101,版本:1.7.2)

时间:2015-05-17 14:53:38

标签: ios parse-platform

我正在努力保存PFObject:tripUIViewController上的属性,类型UNTripPFObject的子类。我的应用程序下载由其他用户创建的旅行。一旦我在这次旅行中更改了一个属性,然后尝试用saveInBackgroundWithBlock保存它,我就会收到错误"找不到对象"。我确保发送和接收用户都具有写访问权限,我在Parse控制台中检查过。我也试过公开写访问无济于事,所以这显然不是问题。

objectId未被触及,因此无法解决问题。

这是控制台显示的内容:

  

(PFObject)Parse.PFObject = {    NSObject = {      isa = Unter.UNTrip    }    dirty = false    operationSetQueue = 0x0000000171651f10" 1 value"    estimatedData = 0x0000000171653290 5个键/值对    lock = 0x00000001702157c0    hasBeenFetched = true     _dataAvailability = 0x0000000171651f40 4个键/值对     _isDeleted = false     _deletingEventually = 0     serverData = 0x0000000171651a90 5个键/值对     hashedObjectsCache = 0x00000001716524b0 2个键/值对     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{

用户A在云中成功保存了行程,为用户A和B(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在接收到objectId(includeKey以检索其他存储的PFObject)之后成功从云中检索行程:

    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,因为它在完成块中完成):

self.trip?.respondingUser?.travelTime = travelTime

然后,用户B尝试通过以下方式保存返回云端的功能:

trip?.saveInBackgroundWithBlock({ (succes:Bool, error: NSError?) -> Void in

成功:false,错误:找不到对象

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

Phew,终于解决了这个问题。

当用户B收到旅行时,会更改属性trip.respondingUser.travelTimerespondingUser是由用户A创建的另一个PFObject子类实例。我忘了给用户B写入PFObject子类实例的写入权限,然后通过包含以下代码行将其发送给用户B: trip.respondingUser?.ACL?.setWriteAccess(true, forUser: respondingUser)其中respondUser是引用用户B的PFUser实例,即收到trip的用户。

问题解决了,谢谢你看看。