我处于允许用户下载PFObject
并在本地修改它的情况,然后他们可以取消更改或点击完成,这将关闭编辑界面但尚未将更改上传到 Parse。他们需要在上一个屏幕上点击 Save 以一次将所有更改写入数据库。
问题是一旦PFObject
修改,如果不从数据库中重新获取,就无法将其恢复到之前的状态。但是我不能总是在每次点击取消时从数据库中重新获取数据,因为之前的状态可能还没有上传到 Parse(这是一个糟糕的用户体验,让他们等待丢弃仅存储在本地的更改)。
例如,假设用户点击编辑PFObject
,他们进行更改然后点击完成,然后再次点击它并进一步编辑对象,然后点击取消。在这种情况下,对象需要恢复到其先前的状态,但该状态尚未上传到 Parse。所以我不能从数据库中重新获取数据来恢复更改,否则它会覆盖他们第一次所做的更改。
为了解决这个问题,我只需获取PFObject
并存储它的副本。我称之为瞬态对象。我会有另一个存储真实对象的属性。用户将修改瞬态对象,当他们点击取消时,我只需将其nil
设置为数据库。这样我就可以确保在用户提交更改之前不会对真实对象进行更改。问题是,PFObject
不采用NSCopying
协议(不知道为什么),因此我无法创建PFObject
. 我对其所做的任何更改都会影响真实对象。
如何在不修改允许控制何时提交和稍后保存数据的应用程序设计的情况下解决此问题?有没有办法扩展PFObject
和采用NSCopying
,以前做过吗?
我确实考虑将对象的属性存储在字典中,并允许用户编辑它,然后在提交时将这些属性中的每一个设置在PFObject
. 这种解决方案的问题在于复杂的结构。在这个应用程序中,我允许用户修改包含多个PFObject
s 的多个数组。除了一个简单的PFObject
.