首页 > 解决方案 > 更改 PFObject 上的 ACL 不会持续到 Parse Server

问题描述

ACL当我保存对on a的更改PFObject(在这种情况下,使其可公开写入)时,完成块成功运行,但更改实际上并未保存到服务器。重新获取对象,或通过 Parse Dashboard 查看它,表明ACL更改没有持久化。事实上,我已经通过服务器日志验证 Parse 服务器甚至从未收到请求。

// first fetch an object from the parse server, then...
print("before: \(object.acl?.hasPublicWriteAccess)") // "false"
object.acl?.hasPublicWriteAccess = true
object.saveInBackground { (success, error) in
    // confirm that success is true and error is nil
    print("after: \(object.acl?.hasPublicWriteAccess)") // "true" - object is updated client-side

    // now, re-fetch the same object or check it in Parse Dashboard. It is not saved as publicly editable.
}

标签: parse-platformparse-serverpfobject

解决方案


更改对象的ACL时,对象本身不会被标记为“脏”,因此保存它不会导致对服务器的请求。您可以通过isDirty在更改ACL.

这与其他PFObjects 相同 - 对指针属性的更改不会将父对象标记为脏。这通常不会遇到,因为简单地保存指针对象本身是很自然的。由于没有PFACL.save()函数,我们可以改为重新设置acl对象的属性以确保它被标记为脏:

object.acl?.hasPublicWriteAccess = toggle.isOn
object.acl = object.acl
object.saveEventually()

可以在这个问题中找到对此的更多讨论。


推荐阅读