我正在努力保存PFObject:trip
是UIViewController
上的属性,类型UNTrip
是PFObject
的子类。我的应用程序下载由其他用户创建的旅行。一旦我在这次旅行中更改了一个属性,然后尝试用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,错误:找不到对象
有人可以解释一下吗?
答案 0 :(得分:1)
当用户B收到旅行时,会更改属性trip.respondingUser.travelTime
。 respondingUser
是由用户A创建的另一个PFObject
子类实例。我忘了给用户B写入PFObject
子类实例的写入权限,然后通过包含以下代码行将其发送给用户B: trip.respondingUser?.ACL?.setWriteAccess(true, forUser: respondingUser)
其中respondUser是引用用户B的PFUser
实例,即收到trip
的用户。
问题解决了,谢谢你看看。