0

私は、ユーザーが a をダウンロードしPFObjectてローカルで変更できるようにし、変更をキャンセルするか、[完了] を押すと、編集インターフェイスを閉じますが、変更を Parse にまだアップロードしない状況にあります。すべての変更を一度にデータベースに書き込むには、前の画面で [保存] をクリックする必要があります。

問題は、PFObjectが変更されると、データベースから再取得しない限り、以前の状態に戻すことができないことです。しかし、以前の状態がまだ Parse にアップロードされていない可能性があるため、Cancel を押すたびにデータベースからデータを再取得できるとは限りません (これは、ローカルにのみ保存されている変更を破棄するのを待たせる悪い UX です)。

たとえば、ユーザーが をタップして編集しPFObject、変更を加えて [完了] をクリックし、もう一度タップしてオブジェクトをさらに編集し、[キャンセル] をクリックしたとします。この場合、オブジェクトを以前の状態に戻す必要がありますが、その状態はまだ Parse にアップロードされていません。したがって、データベースからデータを再フェッチして変更を元に戻すことはできません。そうしないと、最初に行った変更が上書きされます。

この問題を解決するには、単純に を取得してPFObjectそのコピーを保存します。私はそれを一時的なオブジェクトと呼んでいます。実際のオブジェクトを格納する別のプロパティがあります。ユーザーは一時的なオブジェクトを変更し、[キャンセル] を押したときに単純に に設定しnil、代わりに [完了] を押した場合は、実際のオブジェクトを一時的なオブジェクトに等しく設定し、最後に [保存] をクリックすると、実際のオブジェクトをに保存します。データベース。そうすれば、ユーザーが変更をコミットするまで、実際のオブジェクトに変更が加えられないことを確認できます。問題は、プロトコルPFObjectを採用していないNSCopying(理由がわからない) ため、のコピーを作成できないことPFObjectです。それに加えた変更は、実際のオブジェクトに影響します。

データがコミットされ、後で保存されるタイミングを制御できるアプリの設計を変更せずに、これを解決するにはどうすればよいでしょうか? を拡張PFObjectして採用する方法はありNSCopyingますか?以前に行われたことがありますか?

オブジェクトの属性をディクショナリに保存することを検討し、代わりにユーザーがそれを編集できるようにし、コミット時にそれらの属性のそれぞれをPFObject. このソリューションの問題は、複雑な構造で発生します。このアプリでは、ユーザーが複数の を含む複数PFObjectの配列を変更できるようにします。単一の単純なPFObject.

4

1 に答える 1

0

私はこの同じ問題に遭遇しました。PFObject を直接変更するのではなく、更新内容を NSDictionary に保存しました。ユーザーが完了ボタンをクリックすると、PFObject とsaveInBackground. PFObject の「ローカルの変更を破棄する」オプションはないと思います。これを行わない場合、唯一のオプションは既存の PFObject を破棄して再度取得することです。

NSDictionaryコメントに関しては、おそらくNSArrayもっと良いでしょう。実装は特定のプログラムに大きく依存しますが、簡単な例を示します。NSArrayを呼び出しますinstructionArray。tableView に 3 つのセクションがあるとします。NSArrayまた、各セクションのデータ ソースがof であると仮定しますPFObjectsageここで、セクション 2 の各 PFObjectのプロパティを 35 に設定するとします。

NSArrayオブジェクト (実行する命令に対応する) を に追加しますinstructionArray。実行するこの命令は、次の形式を持つことができます

  1. 更新するセクション
  2. 更新するプロパティ
  3. 更新する値

追加するオブジェクトは@[@(2),@"age",@(35)];

ユーザーがおそらく有限量の命令を実行していることを考えると、ループをループしてもパフォーマンスがそれほど高くない可能性があるinstructionArrayためcellForRowAtIndexPath、セルが対応するものを使用しPFObjectて何を表示するかを判断すると、後で命令をループして何を変更することができます。PFObjectが更新 されたかのように表示されます。

保存ボタンがタッチされると、指示をループして実際に編集しPFObjectsます。

セクションではなく特定のオブジェクトを処理するための指示が必要な場合は、instructionArray. おそらく、それがどのタイプの命令であるかを示す識別子を含めることができます。

于 2015-05-22T21:02:46.650 に答える