私は、ユーザーが a をダウンロードしPFObject
てローカルで変更できるようにし、変更をキャンセルするか、[完了] を押すと、編集インターフェイスを閉じますが、変更を Parse にまだアップロードしない状況にあります。すべての変更を一度にデータベースに書き込むには、前の画面で [保存] をクリックする必要があります。
問題は、PFObject
が変更されると、データベースから再取得しない限り、以前の状態に戻すことができないことです。しかし、以前の状態がまだ Parse にアップロードされていない可能性があるため、Cancel を押すたびにデータベースからデータを再取得できるとは限りません (これは、ローカルにのみ保存されている変更を破棄するのを待たせる悪い UX です)。
たとえば、ユーザーが をタップして編集しPFObject
、変更を加えて [完了] をクリックし、もう一度タップしてオブジェクトをさらに編集し、[キャンセル] をクリックしたとします。この場合、オブジェクトを以前の状態に戻す必要がありますが、その状態はまだ Parse にアップロードされていません。したがって、データベースからデータを再フェッチして変更を元に戻すことはできません。そうしないと、最初に行った変更が上書きされます。
この問題を解決するには、単純に を取得してPFObject
そのコピーを保存します。私はそれを一時的なオブジェクトと呼んでいます。実際のオブジェクトを格納する別のプロパティがあります。ユーザーは一時的なオブジェクトを変更し、[キャンセル] を押したときに単純に に設定しnil
、代わりに [完了] を押した場合は、実際のオブジェクトを一時的なオブジェクトに等しく設定し、最後に [保存] をクリックすると、実際のオブジェクトをに保存します。データベース。そうすれば、ユーザーが変更をコミットするまで、実際のオブジェクトに変更が加えられないことを確認できます。問題は、プロトコルPFObject
を採用していないNSCopying
(理由がわからない) ため、のコピーを作成できないことPFObject
です。それに加えた変更は、実際のオブジェクトに影響します。
データがコミットされ、後で保存されるタイミングを制御できるアプリの設計を変更せずに、これを解決するにはどうすればよいでしょうか? を拡張PFObject
して採用する方法はありNSCopying
ますか?以前に行われたことがありますか?
オブジェクトの属性をディクショナリに保存することを検討し、代わりにユーザーがそれを編集できるようにし、コミット時にそれらの属性のそれぞれをPFObject
. このソリューションの問題は、複雑な構造で発生します。このアプリでは、ユーザーが複数の を含む複数PFObject
の配列を変更できるようにします。単一の単純なPFObject
.