更改 PFObject 上的 ACL 不会持久保存到解析服务器

Changing the ACL on a PFObject does not persist to the Parse Server

当我在 PFObject 上保存对 ACL 的更改时(在本例中,使其公开可写),完成块运行成功但更改实际上并未保存到服务器.重新获取对象,或通过 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.
}

更改对象的 ACL 时,对象本身未标记为 'dirty',因此保存它不会导致向服务器发出请求。您可以通过在更改 ACL.

后检查对象上的 isDirty 属性 来验证这一点

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

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

可以在 this issue.

中找到对此的其他讨论